Какое худшее злоупотребление вы видели в синтаксисе 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);
}
}