2008-10-29 7 views

Respuesta

3

Aquí están my own abuses - por el simple hecho de reírse de una noche geek, y demostrar lo que el compilador realmente hace con las expresiones de consulta.

Podría decirse que mi "LINQ to Mandelbrot" es un poco abusiva también :)

Estaba pensando sobre todo en el abuso de la sintaxispor cierto, pero siempre hay un montón de formas de abusar de la misma presencia de LINQ - hacer las cosas "el modo LINQ" cuando hay enfoques más simples disponibles sin usar LINQ. Por ejemplo, conseguir que el elemento n º de una matriz:

// Sensible (we know that people implements IList<Person>) 
Person x = people[10]; 
// Insane 
Person y = people.Skip(9).First(); 

sospecho que habrá más casos de abuso como éste que abusar del poder de las expresiones de consulta, en parte debido a que muchos desarrolladores no se darán cuenta de que abusar de consulta las expresiones incluso funcionarán :)

+1

¿Por qué alguien alguna vez haría Skip.First cuando podrían hacer ElementAt? ;) –

+0

En el lado opuesto de la moneda, hay personas que piensan que las expresiones de consulta son la única forma de usar una base de datos. http://stackoverflow.com/q/16904331/34397 – SLaks

20

Tiene que ser un ray-tracer implemented in a single LINQ expression. ¡Inteligente, hermoso y atemorizante todo al mismo tiempo!

+0

El hecho de que sea todo en una sola expresión da miedo, pero posiblemente si se dividiera en expresiones separadas (lo cual es fácilmente factible debido a la capacidad de compilación) podría ser inteligente, la forma más bella y legible de implementar un ray-tracer. Tal vez. Los tipos anónimos pueden herirlo, en verdad. –

+1

No estoy seguro de qué decir. Por un lado, es un abuso insano de la sintaxis del lenguaje. Por otro lado, alguien obviamente sabía lo que estaba haciendo y está haciendo alarde de un talento que pocas personas tienen. –

2

verdad, que tiene que haber casos en que la gente eligió la sintaxis de LINQ en el que el código para hacerlo:

  • fue igual o más largo que un simple bucle
  • no ofreció un rendimiento o ventaja corrección (lectura/mantenimiento) durante un lazo simple
1

Uno de los "mejores" que he visto en mi vida es de 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); 
} 
} 
Cuestiones relacionadas