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

c# – 如何证明返回IEnumerable的方法已被调用两次?

发布时间:2020-12-15 23:47:19 所属栏目:百科 来源:网络整理
导读:在Visual Studio中,ReSharper警告:“可能多次枚举IEnumerable”,代码如下: static void Main(string[] args){ IEnumerablestring items = Test2(); foreach (var item in items) { Console.WriteLine(item); } var newitems = new StringBuilder(); foreac
在Visual Studio中,ReSharper警告:“可能多次枚举IEnumerable”,代码如下:

static void Main(string[] args)
{
    IEnumerable<string> items = Test2();
    foreach (var item in items)
    {
        Console.WriteLine(item);
    }
    var newitems = new StringBuilder();
    foreach (var item in items)
    {
        newitems.Append(item);
    }
}

private static IEnumerable<string> Test2()
{
    string[] array1 = { "1","2","3" };
    return array1;
}

我希望Test2方法将被调用两次,但它被调用一次.

我错过了什么?

解决方法

它只被调用一次,因为Test2()实际上返回了string [],它也是一个IEnumerable< string>.
此字符串[]数组仍然由项引用,因此每次使用项时,只需重新使用该数组.

您期望的情况是使用iterator block实现Test2():

private static IEnumerable<string> Test2()
{
    string[] array1 = { "1","3" };

    foreach (var str in array1) 
    {
        yield return str; 
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读