В недавнем Dot Net Rocks podcast, Джон Скит упомянул возможные злоупотребления синтаксисом LINQ. Какие примеры видели люди, где с LINQ делаются сумасшедшие вещи?Какое худшее насилие вы видели в синтаксисе LINQ?
ответ
Здесь my own abuses - только ради смеха над ночью выродка и демонстрации того, что на самом деле делает компилятор с выражениями запроса.
Возможно мой "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();
Я подозреваю, что там будет больше случаев злоупотребления, как это, чем злоупотребление властью выражений запросов, отчасти потому, что многие разработчики не понимают, что злоупотребление запрос выражения будут даже работать :)
Это должно быть ray-tracer implemented in a single LINQ expression. Умный, красивый и страшный в одно и то же время!
Честно говоря, это должно быть случаев, когда люди выбрали синтаксис 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);
}
}
Зачем кому-либо когда-либо делать Skip.First, когда они могут делать ElementAt? ;) – 2009-09-18 08:27:32
На противоположной стороне монеты есть люди, которые считают, что выражения запросов - единственный способ использовать базу данных. http://stackoverflow.com/q/16904331/34397 – SLaks 2013-06-03 19:33:21