Как сказать лямбда -функцию, чтобы захватить копию вместо ссылки в C#?C#

Место общения программистов C#
Ответить
Anonymous
 Как сказать лямбда -функцию, чтобы захватить копию вместо ссылки в C#?

Сообщение Anonymous »

Я изучал C#, и я пытаюсь понять лямбдас. В этом примере ниже он распечатывает 10 десять раз. < /P>

class Program
{
delegate void Action();
static void Main(string[] args)
{
List actions = new List();

for (int i = 0; i < 10; ++i )
actions.Add(()=>Console.WriteLine(i));

foreach (Action a in actions)
a();
}
}
< /code>

Очевидно, что сгенерированный класс, стоящий за Lambda, хранит ссылку или указатель на переменную int i < /code> и присваивает новое значение одному и тому же ссылке каждый раз, когда цикл итерации. Есть ли способ заставить Lamda взять копию вместо этого, например, синтаксис C ++ 0x < /p>

[&](){ ... } // Capture by reference
< /code>

vs.

[=](){ ... } // Capture copies


Подробнее здесь: https://stackoverflow.com/questions/451 ... rence-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»