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

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

Ответ 2

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

Возможно, мой "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();

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

Ответ 3

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

  • Было то же самое или длиннее простого цикла
  • Предлагается неэффективность или правильность (удобочитаемость/ремонтопригодность) в течение простого цикла

Ответ 4

Один из "лучших", которые я когда-либо видел, - это 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);
 }
}