Динамическое заражение, часть вторая

В прошлый раз мы обсуждали, как параметр «dynamic» стремится расшириться по программе подобно вирусу: если выражение типа dynamic «касается» другого выражения, то последнее зачастую тоже становится типа dynamic. Сегодня я хочу остановиться на менее всего понимаемом аспекте вывода типа метода, который также применяет модель заражения, когда в игру вступает параметр «dynamic». Постоянные читатели знают, что…

0

Не смешивайте out-параметры и LINQ

Я вернулся из ежегодного отпуска, проведенного в прекрасном месте на юго-западе Онтарио; прежде чем переходить к теме сегодняшнего поста, посмотрите на снимок, сделанный с помощью Windows Phone при возвращении домой. Мы находимся на высоте 37000 футов сразу за городом Биллингс, штат Монтана, за несколько минут до захода солнца: Все небо было заполнено молниями, которые, к…

1

Никогда не говори никогда. Часть1

Сможете ли вы придумать лямбда-выражение, неявно приводимое к функции Func<T> для любых возможных T? . . . . . . . . . . . Подсказка: это же лямбда-выражение также неявно приводится к типу Action. . . . . . . . . . Func<int> function = () => { throw new Exception(); }; Правила…

1

Замыкания на переменных цикла. Часть 2

Спасибо всем, кто оставил содержательные и глубокие комментарии для предыдущего сообщения[1]. Большинству стран действительно стоит применить методы «мажоритарно-преференциального[2]» голосования. Эта же система лучше подходит гикам. Многие оставили свои мнения в форме: «Я бы хотел, чтобы вы внесли изменения, но если не можете, тогда выдавайте предупреждения». Или «Не вносите изменения, просто добавьте предупреждения» и т.д. Но…


О вреде замыканий на переменных цикла

Я не знаю, почему я до сих пор не писал об этом в своем блоге, ведь это один из самых распространенных некорректных отчетов об ошибке, которые мы получаем. Многие считают, что они нашли ошибку в компиляторе, но на самом деле с компилятором все в порядке, а ошибка находится в их коде. Это ужасная ситуация для…


Простые имена не так уж просты. Часть 2.

А также о вулканах и еде Я вернулся из короткого отпуска – навещал друзей на острове Мауи. Я никогда раньше не был в этой части света. Как выяснилось, это небольшой островок посреди Тихого океана, который просто напичкан вулканами (который состоит из одних вулканов). Жутко! Но потрясающе! Самое большое впечатление Гавайские острова произвели на меня, совершенно…


Блоки итераторов, часть Седьмая: Почему нет анонимных итераторов?

Эта аннотация к комментарию к пятой части, по моему мнению, заслуживает повышения до самостоятельной статьи. Почему мы не разрешаем анонимные итераторы? Я был бы счастлив иметь анонимные блоки итераторов. Я хочу писать что-то вроде: IEnumerable<int> twoints = ()=>{ yield return x; yield return x*10; }; foreach(int i in twoints) … Было бы вообще офигенно уметь…


Ммм, Карри

В недавнем комментарии меня спросили, почему программисты на Haskell иногда пишут лямбды C# в таком стиле: Func<int, Func<int, int>> add = x=>y=>x+y; и затем вызывают их как sum = add(2)(3); поскольку первый вызов, конечно, возвращает функцию, прибавляющую два, которую потом вызывают с тройкой. Зачем делать такое вместо более прямолинейного Func<int, int, int> add = (x,y)=>x+y;…