は、コード例である:今クロージャ内で例外がキャッチされなかったのはなぜですか?ここ
public IList<LogEntry> ReadLogs(Guid id, string name)
{
var logs = this.RetrieveLogs(id, name);
if (logs != null)
{
foreach (LogEvent logEvent in logs)
{
// bla, bla, bla
}
}
return logEntries;
}
private IEnumerable<LogEvent> RetrieveLogs(Guid id, string name)
{
try
{
FilterCriteria filterCriteria = CreateFilterCriteria();
return (from log in this.loggingProvider.ReadLogs(filterCriteria, 1)
where log.ParticipantObjects[0].ParticipantObjectId == id.ToString()
&& log.LogEventParameters[0].Value == name
orderby log.Timestamp.ToLocalTime() descending
select log).AsEnumerable();
}
catch (Exception ex)
{
this.tracer.Write(Category.Error, ex, "Error");
return null;
}
}
例外がloggingProvider.ReadLogs()
方法の内側にあった場合、それは捕捉され追跡されます。しかし、たとえば、ParticipantObjects[0]
がない場合、この例外はここでは捕捉されず追跡されません。それはラムダ式とクロージャーと関係があるようです。
説明は何ですか?
あなたが何かを行うまでクエリが実行されません。 – user1666620