我有一个用C#编写的小命令行应用程序,它使用LogParser,我希望将它清理一下,因为它只是一个庞大的方法。
我运行查询并得到一个LogRecordSet对象:
// run the query against wowza log
LogRecordSet logSet = logQuery.Execute(sql, new W3CInputFormat());
一切都好。现在我想将logSet传递给一个方法,我将评估所有内容:
private static IEnumerable<Unprocessed> CreateRecords(LogRecordSet logRecordset)
{
for (; !logRecordset.atEnd(); logRecordset.moveNext())
{
...
}
}
我称之为:
var records = CreateRecords(logSet);
这个编译很好,但它只是忽略了CreateRecords方法,只是跳过它。我承认对c#命令行应用程序知之甚少,但我只是想知道为什么会发生这种情况,并且不确定要google什么。
修改 我已经研究了一下,问题似乎源于我的方法使用
yield return log;
我可以在这种情况下不使用收益率回报吗?
private static IEnumerable<Unprocessed> CreateRecords(LogRecordSet logRecordset)
{
for (; !logRecordset.atEnd(); logRecordset.moveNext())
{
yield return ...;
}
}
答案 0 :(得分:1)
你的CreateRecords()
看起来没问题,只要确保你开始枚举它返回的IEnumerable,你就会看到它被调用。例如:
var foo = CreateRecords().ToArray();