为可枚举的每个项目进行收益率返回的目的

时间:2015-02-11 18:38:24

标签: c# foreach yield

以下C#功能是否相同?

    protected IEnumerable<TResult> Execute(DbCommand command)
    {
        IDataReader reader = database.ExecuteReader(command);

        foreach (TResult result in resultSetMapper.MapSet(reader))
        {
            yield return result;
        }
    }

    protected IEnumerable<TResult> Execute2(DbCommand command)
    {
        IDataReader reader = database.ExecuteReader(command);

        return resultSetMapper.MapSet(reader);
    }

我找到了第一个浏览Microsoft.Practices.EnterpriseLibrary.Data.CommandAccessor代码的函数。

如果我理解正确的收益率,那么foreach没有任何意义。如果MapSet返回延迟集合,则可以直接返回。如果MapSet返回一个物化集合,那么逐个返回它的元素是没有利润的。

0 个答案:

没有答案