2008-10-29 22 views

Trả lời

3

Dưới đây là my own abuses - hoàn toàn là để có tiếng cười vào một đêm geek, và chứng minh những gì trình biên dịch thực sự làm với biểu thức truy vấn.

Có thể cho rằng tôi "LINQ to Mandelbrot" là một chút lạm dụng quá :)

Tôi đặc biệt nghĩ đến việc lạm dụng cú pháp bằng cách này, nhưng luôn luôn có rất nhiều cách để lợi dụng sự hiện diện của LINQ - làm việc "cách LINQ" khi có các phương pháp đơn giản hơn mà không cần sử dụng LINQ. Ví dụ, nhận được tới phần tử thứ n của một mảng:

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

tôi nghi ngờ sẽ có nhiều trường hợp lạm dụng như thế này hơn lạm dụng sức mạnh của biểu thức truy vấn, một phần là do nhiều nhà phát triển sẽ không nhận ra rằng lạm dụng truy vấn biểu thức thậm chí sẽ hoạt động :)

+1

Tại sao mọi người lại có thể bỏ qua.Đầu tiên khi họ có thể làm ElementAt? ;) –

+0

Ở phía đối diện của đồng xu, có những người nghĩ rằng biểu thức truy vấn là cách duy nhất để sử dụng cơ sở dữ liệu. http://stackoverflow.com/q/16904331/34397 – SLaks

20

Nó phải là ray-tracer implemented in a single LINQ expression. Thông minh, đẹp và đáng sợ cùng một lúc!

+0

Thực tế là tất cả trong một biểu hiện là đáng sợ - nhưng rất có thể nếu nó được chia thành các biểu thức riêng biệt (có thể dễ dàng thực hiện do tính tương thích), nó có thể thông minh, cách đẹp nhất và dễ đọc nhất để thực hiện bộ dò tia. Có lẽ. Các loại vô danh có thể làm tổn thương nó, phải thừa nhận. –

+1

Tôi không biết phải nói gì. Một mặt, đó là một sự lạm dụng cú pháp ngôn ngữ điên rồ. Mặt khác, ai đó rõ ràng biết họ đang làm gì và phô trương một số tài năng mà mọi người có. –

2

Thành thật mà nói, nó đã nhận được trường hợp người chọn cú pháp LINQ nơi mã để làm như vậy:

  • là như nhau hoặc dài hơn một vòng lặp đơn giản
  • Cung cấp không có hiệu suất hoặc lợi thế đúng đắn (khả năng đọc/bảo trì) trong một vòng lặp đơn giản
1

một trong những "tốt nhất" người mà tôi từng thấy là từ 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); 
} 
} 
Các vấn đề liên quan