74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

Лямбда-выражения и локальные переменные

08.09.2013, 19:55. Показов 2199. Ответов 8
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void Add(ref int a, int b)
{
    a += b;
}
 
static void Main(string[] args)
        {
            AsmMath f = new AsmMath(Add);
            int a = 10;
            f(ref a, 5);
 
            Console.WriteLine(Action(Add, 10, 20));
            Console.WriteLine(Action((ref int a, int b) => a -= b, 40, 15));
            Console.ReadLine();
        }
C#
1
error CS0136: Невозможно объявить локальную переменную с именем "a" в этой области действия, так как она придаст другое значение "a"
Каким образом локальные переменные влияют на лямбда-выражения?
Пытаюсь провести аналогию с с++, там такой код скомпилировался бы без проблем, потому что захват "a" явно не указан.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2013, 19:55
Ответы с готовыми решениями:

Локальные переменные
Подскажите, пожалуйста, как использовать локальные переменные неких методов в других методах?

Локальные статические переменные
Я расстроился, когда узнал что так писать на шарпе нельзя: public void func() { static int...

Локальные статические переменные
могу ли я в теле цикла объявить переменную которая не будет заново инициализироваться на каждой...

Лямбда-выражения!
Func<double, double> expr = x => x / 2; expr(someNumber); как мне сделать чтобы при вызове...

8
Master of Orion
Эксперт .NET
6094 / 4950 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2013, 19:57 2
Kgfq, захват производится неявно

Добавлено через 43 секунды
существует дохрена кода, Который на С++ бы скомпилировался, а для C# - нет... C# более строгий.
1
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
08.09.2013, 19:58  [ТС] 3
Psilon, неужели теперь всегда придется придумывать уникальные имена для ламбд? Это же неудобно.
0
Master of Orion
Эксперт .NET
6094 / 4950 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2013, 20:08 4
Kgfq, а любителям php и ruby неудобна статическая типизация в C++.

К тому же я бы не сказал, что это хоть раз было проблемой за все время, что я на шарпе пишу:
C#
1
2
3
4
            int a = 5;
 
            AsmMath add = (ref int x, int y) => x += y;
            AsmMath sub = (ref int x, int y) => x -= y;
достаточно, чтобы не захватывались локальные переменные/поля, а в каждой отдельной лямбде имена спокойно повторяются.

Добавлено через 1 минуту
Kgfq, зато это удобно, когда невявно захватывается десяток переменных Конечно это уже граничит с быдлокодом, но мало ли что бывает
1
969 / 772 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
08.09.2013, 20:18 5
int a = 5;
использование подобного вида переменных допускается только коротком локальном контексте.
в остальных случаях давайте нормальные имена.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
08.09.2013, 20:20  [ТС] 6
Konctantin, да, это я знаю. Пишу лабораторные для универа, там много осмысленных и не надо.
0
969 / 772 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
08.09.2013, 20:24 7
ну естественно, знаю, делал помогал как-то делать лабораторные брату - насмотрелся на такие переменные.

Не по теме:

видимо это в ВУЗах учат так писать, ибо сам так никогда не пишу, и на программиста не учился.

0
184 / 184 / 29
Регистрация: 14.04.2013
Сообщений: 499
08.09.2013, 22:55 8
Цитата Сообщение от Konctantin Посмотреть сообщение
видимо это в ВУЗах учат так писать, ибо сам так никогда не пишу, и на программиста не учился.

Не по теме:

у меня некоторые преподы и сами так пишут....

0
Master of Orion
Эксперт .NET
6094 / 4950 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2013, 23:14 9
давайте хвастаться?
Цитата Сообщение от Новый препод по КГ
Вот раньше у нас был препод по комп. графике, слава Богу его уволили 4 года назад, он, видите ли, преподавал OpenGL! Но чему можно учиться в OpenGL, там за вас уже всю работу компьютер делает. Нееет, я преподавал КГ 30 лет назад, лично загружал перфоленты и учил студентов, не то, что сейчас... Поэтому у меня есть примеры кода на паскале 30-летней давности, по ней будете делать лабы

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2013, 23:14
Помогаю со студенческими работами здесь

Лямбда выражения
Как сделать таккую выборку? Есть три коллекции: Добавить в третью коллекцию те элементы, где...

Каким образом можно обнулить локальные переменные типа string?
Это переменные "FileInfo", "file1" +сделать так, чтобы этот цикл повторялся, пока не закончатся...

Лямбда-выражения, оператор if
Доброго времени суток! Почему у меня после вычисления переменной xab, дальше пропускаются две...

Без Лямбда выражения
Господа. Вот код теста. Помогите пожалуйста написать то же самое, но без Лямбда выражения....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru