On a recent Dot Net Rocks podcast, Jon Skeet mentioned possible abuses of LINQ syntax. What examples have people seen where crazy things are being done with LINQ?
It has to be a ray-tracer implemented in a single LINQ expression. Clever, beautiful, and scary all at the same time!
Here are my own abuses - purely for the sake of having a laugh at a geek night, and demonstrating what the compiler actually does with query expressions.
Arguably my "LINQ to Mandelbrot" is a bit abusive too :)
I was particularly thinking of abuse of the syntax by the way, but there are always plenty of ways to abuse the very presence of LINQ - doing things "the LINQ way" when there are simpler approaches available without using LINQ. For instance, getting to the n
th element of an array:
// Sensible (we know that people implements IList<Person>)
Person x = people[10];
// Insane
Person y = people.Skip(9).First();
I suspect there will be more cases of abuse like this than abusing the power of query expressions, partly because many devs won't realise that abusing query expressions will even work :)
Honestly, it's got to be cases where people chose the LINQ syntax where the code to do so:
- Was the same or longer than a simple loop
- Offered no performance or correctness advantage (readability/maintainability) over a simple loop
One of the "best" ones I've ever seen is from 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);
}
}
来源:https://stackoverflow.com/questions/246270/what-is-the-worst-abuse-youve-seen-of-linq-syntax