重载使用收益率返回

ben*_*wey 6 c# yield

我没有太多使用yield关键字的经验.我有类型转换的这些IEnumerable <T>扩展.

我的问题是第一个重载方法是否具有与第二个方法相同的收益返回效果?

public static IEnumerable<TTo> ConvertFrom<TTo, TFrom>(this IEnumerable<TFrom> toList)
{
    return ConvertFrom<TTo, TFrom>(toList, TypeDescriptor.GetConverter(typeof(TTo)));
}

public static IEnumerable<TTo> ConvertFrom<TTo, TFrom>(this IEnumerable<TFrom> toList, TypeConverter converter)
{
    foreach (var t in toList)
        yield return (TTo)converter.ConvertFrom(t);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 4

当您调用第一个重载时,它将立即调用第二个重载。这不会执行其主体中的任何代码,这些代码将被移动到实现迭代器块的嵌套类中。当GetEnumerator()和 thenMoveNext()首次在返回值上调用时IEnumerable<TTo>第二个重载中的代码将开始执行。

我有一篇关于迭代器块实现的相当长的文章,您可能会觉得有趣。