C#Func委托

时间:2009-11-30 18:44:14

标签: c# delegates

我使用Func<>添加整数范围(101,105) delegate。我想在执行以下操作时得到101,102,.. 105作为输出。但是我得到204,204,..... 出了什么问题?

class MainClass
    {
       static List<Func<int>> somevalues = new List<Func<int>>();
        static void Main()
        {
            foreach (int r in  Enumerable.Range(100, 105))
            {
                somevalues.Add(() => r);
            }

            ProcessList(somevalues);
            Console.ReadKey(true);
        }

        static void ProcessList(List<Func<int>> someValues)
        {
            foreach (Func<int> function in someValues)
            {
                Console.WriteLine(function());
            }
        }

    }

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

foreach (int r in  Enumerable.Range(100, 105))
{
   int s = r;
   somevalues.Add(() => s);
}

我认为,您需要将外部变量捕获到临时值以实现输出。我不确定所谓的概念是什么(可能是捕获的变量)。

答案 2 :(得分:1)

范围方法签名如下:

Range(int start, int count);

你说的是“从100开始,给我下一个105号码。”

不是,“从100开始到105完成。”