将LogRecordSet传递到方法中

本文关键字:方法 LogRecordSet | 更新日期: 2023-09-27 18:15:42

我有一个用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#命令行应用程序知之甚少,但我只是想知道为什么会发生这种情况,并且不确定该谷歌什么。

编辑我又调查了一下,问题似乎是由于我的方法使用了

yield return log;

在这个上下文中我可以不使用yield return吗?

private static IEnumerable<Unprocessed> CreateRecords(LogRecordSet logRecordset)
{
    for (; !logRecordset.atEnd(); logRecordset.moveNext())
    {
        yield return ...;
    }
}

将LogRecordSet传递到方法中

你的CreateRecords()看起来很好,只要确保你开始枚举它返回的IEnumerable,你会看到它会被调用。例如:

var foo = CreateRecords().ToArray();