加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 重载使用yield return

发布时间:2020-12-15 08:35:38 所属栏目:百科 来源:网络整理
导读:我没有太多使用yield关键字的经验.我有这些IEnumerable T类型转换的扩展名. 我的问题是第一个重载方法是否具有与第二个方法相同的收益返回效果? public static IEnumerableTTo ConvertFromTTo,TFrom(this IEnumerableTFrom toList){ return ConvertFromTTo,
我没有太多使用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);
}

解决方法

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

我有一个相当长的article on the iterator block implementation,你可能会觉得有趣.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读