Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно ? / 13 сообщений из 13, страница 1 из 1
29.08.2014, 17:34
    #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
29.08.2014, 17:49
    #38733017
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно ?
И где же здесь замыкание?
...
Рейтинг: 0 / 0
29.08.2014, 17:51
    #38733019
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно ?
РостигайНужно ли выносить определение обеих переменных из цикла ? Мне припоминается, что я встречал противоположные рекомендации.
Одни говорили, что компилятор сам с этим справится, а другие рекомендовали выносить.
Так что же лучше ?

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

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

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

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

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


да ?

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



да ?

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

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

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

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

П.С. заипал, уже даже не смешно.
...
Рейтинг: 0 / 0
01.09.2014, 18:18
    #38734332
mikron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно ?
...
Рейтинг: 0 / 0
02.09.2014, 07:37
    #38734518
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно ?
mikron closure and variable capture in foreach vs. for
Как выше было сказано, нет в коде ТС никакого замыкания. А пример по ссылке - для C#5.0, в более старших версиях всё вполне предсказуемо.
...
Рейтинг: 0 / 0
02.09.2014, 10:38
    #38734651
ultra_alex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно ?
Что-то не понял зачем там может понадобиться промежуточная переменная? Поясните, в чем может быть проблема?
...
Рейтинг: 0 / 0
02.09.2014, 10:53
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно ? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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