powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно ?
13 сообщений из 13, страница 1 из 1
Как правильно ?
    #38732997
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Код: c#
1.
2.
3.
4.
5.
6.
7.
            foreach (var item in DocRecs)
            {
                //PS. нужна ли тут промежуточная переменная ? Без нее будут проблемы с клозурой ?
                var ff = item;
                var result = DoWork(ff);
                Console.WriteLine(result);
            }



Нужно ли выносить определение обеих переменных из цикла ? Мне припоминается, что я встречал противоположные рекомендации.
Одни говорили, что компилятор сам с этим справится, а другие рекомендовали выносить.
Так что же лучше ?
...
Рейтинг: 0 / 0
Как правильно ?
    #38733017
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И где же здесь замыкание?
...
Рейтинг: 0 / 0
Как правильно ?
    #38733019
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РостигайНужно ли выносить определение обеих переменных из цикла ? Мне припоминается, что я встречал противоположные рекомендации.
Одни говорили, что компилятор сам с этим справится, а другие рекомендовали выносить.
Так что же лучше ?

в данном случае ничего не нужно.
нет захвата внешней переменной, обычная передача параметра функции.
...
Рейтинг: 0 / 0
Как правильно ?
    #38733022
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок ок.

Вообще вопрос не про замыкание. А про то, где лучше вставить объявление переменных :)
...
Рейтинг: 0 / 0
Как правильно ?
    #38733031
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигайок ок.

Вообще вопрос не про замыкание. А про то, где лучше вставить объявление переменных :)

там где их используешь.
...
Рейтинг: 0 / 0
Как правильно ?
    #38733050
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

Т.е. таки внутри цикла можно написать
Код: c#
1.
 string sss  = ...


да ?

Просто вроде бы встречал рекомендацию выносить.
Как по мне - я считаю, что компилятор наверняка сам этим займется. Но я вопрос задал, чтобы точно выяснить как нужно.
...
Рейтинг: 0 / 0
Как правильно ?
    #38733120
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РостигайТ.е. таки внутри цикла можно написать
Код: c#
1.
 string sss  = ...



да ?

Просто вроде бы встречал рекомендацию выносить.
Как по мне - я считаю, что компилятор наверняка сам этим займется. Но я вопрос задал, чтобы точно выяснить как нужно.

разницы нет, компилятор оптимизирует конечно. а вот что касается замыканий, то да, значение итератора желательно сохранять в локальной переменной, чтобы предотвратить захват. хотя решарпер, допустим, об этом сам скажет.
...
Рейтинг: 0 / 0
Как правильно ?
    #38733126
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttразницы нет, компилятор оптимизирует конечно. а вот что касается замыканий, то да, значение итератора желательно сохранять в локальной переменной, чтобы предотвратить захват. хотя решарпер, допустим, об этом сам скажет.Да, .Net в этом плане очень тупой - никогда не можешь быть уверен, что то, что ты передал в замыкание реально будет в нем использовано. Java в этом плане умно сделала - хочешь что-то отдать в замыкание, объяви final, и ни о чем не думай.
Поэтому разработчики .Net срут крипичами, и упрашивают изменить эту бодягу (особенно с foreach веселуха). Вроде бы в 5й версии будет исправлено отчасти.
...
Рейтинг: 0 / 0
Как правильно ?
    #38733198
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvДа, .Net в этом плане очень тупой - никогда не можешь быть уверен, что то, что ты передал в замыкание реально будет в нем использовано. Java в этом плане умно сделала - хочешь что-то отдать в замыкание, объяви final, и ни о чем не думай.
Поэтому разработчики .Net срут крипичами, и упрашивают изменить эту бодягу (особенно с foreach веселуха). Вроде бы в 5й версии будет исправлено отчасти.

ты вообще какую-то тупорылую хрень понёс не по теме, как обычно.
речь вообще не шла о замыканиях.
мозги себе купи уже наконец.

а C# 5.0 уже вышла пицот лет назад, дурачёк. не лезь, малыш, куда не дотягиваешься, ножки коротки.

П.С. заипал, уже даже не смешно.
...
Рейтинг: 0 / 0
Как правильно ?
    #38734332
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как правильно ?
    #38734518
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron closure and variable capture in foreach vs. for
Как выше было сказано, нет в коде ТС никакого замыкания. А пример по ссылке - для C#5.0, в более старших версиях всё вполне предсказуемо.
...
Рейтинг: 0 / 0
Как правильно ?
    #38734651
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то не понял зачем там может понадобиться промежуточная переменная? Поясните, в чем может быть проблема?
...
Рейтинг: 0 / 0
Как правильно ?
    #38734668
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultra_alexЧто-то не понял зачем там может понадобиться промежуточная переменная? Поясните, в чем может быть проблема?

Код: c#
1.
2.
3.
4.
5.
foreach (var messageToSend in messagesToSend)
{
  Task<bool> processingTask = new Task<bool>(() => SendMessage(messageToSend));
  processingTask.Start();
}



в итоге высока вероятность, что отправится лишь одно (последнее) сообщение, из-за захвата переменной цикла.

для C# 5 и выше, в каждой итерации создаётся новая переменная, так что проблем не будет.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]