我是新手,正在学习使用lamda表达式
,并尝试弄清楚一些事情。
我已经创建了以下代码部分,该代码返回日志文件的文件路径。
public static string GetLogFile()
{
var fileTarget = LogManager.Configuration.AllTargets.Where(t=>t.Name == "LogName") as FileTarget;
return fileTarget == null ? string.Empty : fileTarget.FileName.Render(new LogEventInfo { Level = LogLevel.Info });
}
我的问题是当我使用以下代码时,fileTarget
为空:
LogManager.Configuration.AllTargets.Where(t=>t.Name == "LogName")
但是,如果我将那一行代码更改为:
LogManager.Configuration.AllTargets.FirstOrDefault(t=>t.Name == "LogName")
返回我的日志文件的正确路径。有人能否解释一下Where
和FirstOrDefault
之间是否有重大区别?
Where
返回一个IEnumerable
。当你试图用as
进行类型强制转换时,它会返回null
;但是FirstOrDefault
返回一个可被强制转换的实例。 - Sebastian Hofmannvalue as <type>
时要小心。如果您期望值是该类型,请使用(<type>)value
。 - DavidG