В недавнем Dot Net Rocks подкаст, Джон Скит упомянул возможные злоупотребления синтаксисом LINQ. Какие примеры видели люди, где с LINQ делаются сумасшедшие вещи?
Какое худшее злоупотребление, которое вы видели в синтаксисе LINQ?
Ответ 1
Он должен быть ray-tracer, реализованный в одном выражении 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);
}
}