What is the worst abuse you've seen of LINQ sy

2020-06-03 01:51发布

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?

4条回答
再贱就再见
2楼-- · 2020-06-03 02:28

It has to be a ray-tracer implemented in a single LINQ expression. Clever, beautiful, and scary all at the same time!

查看更多
Fickle 薄情
3楼-- · 2020-06-03 02:42

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 nth 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 :)

查看更多
Anthone
4楼-- · 2020-06-03 02:52

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
查看更多
We Are One
5楼-- · 2020-06-03 02:53

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);
 }
}
查看更多
登录 后发表回答