How do I get around this lambda expression outer variable issue?

后端 未结 4 1794
感情败类
感情败类 2021-01-19 18:47

I\'m playing with PropertyDescriptor and ICustomTypeDescriptor (still) trying to bind a WPF DataGrid to an object, for which the data is stored in a Dictionary.

Sinc

4条回答
  •  一生所求
    2021-01-19 19:27

    Marc's solution is of course correct, but I thought I'd expand upon WHY below. As most of us know, if you declare a variable in a for or foreach statement, it only lives as long as what's inside, which makes it seem like the variable is the same as a variable declared in the statement-block of such a statement, but that's not right.

    To understand it better, take the following for-loop. Then I'll re-state the "equivalent" loop in a while-form.

    for(int i = 0; i < list.Length; i++)
    {
        string val;
        list[i] = list[i]++;
        val = list[i].ToString();
        Console.WriteLine(val);
    }
    

    This works out to in while-form like below: (it isn't exactly the same, because continue will act differently, but for scoping rules, it's the same)

    {
        int i = 0;
        while(i < list.Length)
        {
            {
                string val;
                list[i] = list[i]++;
                val = list[i].ToString();
                Console.WriteLine(val);
            }
            i++;
        }
    }
    

    When "exploded" out this way, the scope of the variables becomes clearer, and you can see why it always captures the same "s" value in your program, and why Marc's solution shows where to place your variable so that a unique one is captured every time.

提交回复
热议问题