Какое худшее злоупотребление вы видели в синтаксисе LINQ?

На недавнем подкасте Dot Net Rocks Джон Скит упоминал о возможных злоупотреблениях синтаксисом LINQ. Какие примеры видели люди, когда с LINQ совершаются безумные поступки?

4 ответа

Это должен быть ray-tracer, реализованный в одном выражении LINQ. Умно, красиво и страшно одновременно!

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

Возможно, мой "LINQ to Mandelbrot" тоже немного оскорбительный:)

Между прочим, я особенно думал о злоупотреблении синтаксисом, но всегда есть много способов злоупотребить самим присутствием LINQ - делать вещи "путем LINQ", когда существуют более простые подходы, доступные без использования LINQ. Например, добраться до n элемент массива:

// Sensible (we know that people implements IList<Person>)
Person x = people[10];
// Insane
Person y = people.Skip(9).First();

Я подозреваю, что будет больше случаев злоупотребления подобным образом, чем злоупотребление силой выражений запросов, отчасти потому, что многие разработчики не поймут, что злоупотребление выражениями запросов будет даже работать:)

Честно говоря, это должны быть случаи, когда люди выбирают синтаксис LINQ, где код для этого:

  • Был такой же или длиннее простой петли
  • Отсутствие преимущества в производительности или корректности (удобочитаемость / ремонтопригодность) по сравнению с простым циклом

Один из "лучших", которые я когда-либо видел, от thedailywtf.com

public string LastSixDigits
{
 get
 {
   if (string.IsNullOrWhiteSpace(this.Number) || this.Number.Length < 6)
     return string.Empty;
   return this.Number.Reverse().Take(6).Reverse().Aggregate(string.Empty, (s, c) => s += c);
 }
}
Другие вопросы по тегам