为什么收益率回报后的下一个语句会被执行?

时间:2017-05-24 13:00:08

标签: c# yield-return

我有以下函数迭代某些行并搜索数据库中的文件。如果在数据库中找不到文件,则存储库将返回null,然后该函数应返回空ResultRow。 if语句之后的Assert()在某些情况下会触发。为什么?怎么可能?

IEnumerable<ResultRow> DoRows(SequenceListWithQc list, 
IList<TestSpecification> testSpecs, bool writeResults=false)
{
    foreach (var row in list.Rows)
    {
        var result = new ResultRow();

        result.FileName = row.Columns[list.Headers.IndexOf("File Name")];

        var rawFile = repository.GetRawFileByFilename(result.FileName);

        if (rawFile == null)
        {
            yield return result;
        }

        Debug.Assert(rawFile != null);
    }
}

1 个答案:

答案 0 :(得分:2)

您可以调用continue继续移动到循环中的下一行

    if (rawFile == null)
    {
        yield return result;
        continue;
    }