c# – 收益率突破; – 疯狂的行为

前端之家收集整理的这篇文章主要介绍了c# – 收益率突破; – 疯狂的行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main (string[] args)
        {
            var test1 = Test1(1,2);
            var test2 = Test2(3,4);
        }

        static IEnumerable Test1(int v1,int v2)
        {
            yield break;
        }

        static IEnumerable Test2 (int v1,int v2)
        {
            return new String[] { };
        }
    }
}

“test1”似乎是一个IEnumerable,其中v1和v2(params)为字段,而“Test1”未被调用.

“Test2”工作“设计”:)

这是怎么回事?

解决方法

调用Test1,但除非您遍历结果,否则不会在yield break上遇到断点.

基本上,Test1被转换为一个为你实现IEnumerable的状态机…但你的方法的所有主体都在该状态机内,除非你通过调用GetEnumerator()然后调用MoveNext()(或者使用状态机)来使用状态机一个foreach循环)你不会看到你的身体执行.

有关更多信息,请参阅我的general iterator article和我的iterator implementation文章,以及Eric Lippert的两篇博文:Psychic Debugging part onePsychic Debugging part two.

猜你在找的C#相关文章