Tôi yêu các câu lệnh LINQ cho cú pháp biểu cảm và các tính năng tiện lợi khác. Tuy nhiên, đôi khi tôi thấy rất phiền phức khi gỡ lỗi chúng. Cụ thể, khi tôi chạy một câu lệnh LINQ trên một bộ sưu tập và một trong các thành phần trong bộ sưu tập gây ra một ngoại lệ, làm thế nào tôi có thể tìm ra đầu vào của vấn đề là gì và vấn đề đến từ đâu?Gỡ lỗi LINQ trên cơ sở từng phần tử
Hãy tưởng tượng tôi có một tập tin văn bản với 1000 số thực:
0.46578
12.314213
1.444876
...
Tôi đang đọc bài viết này như một List<string>
và tải nó vào một cấu trúc dữ liệu cụ thể hơn:
var file_contents = File.ReadAllLines("myfile.txt");
var data = file_contents.Select(s => double.Parse(s));
Bây giờ, cho điều này đầu vào cụ thể, tôi không quan tâm đến việc xem xét cẩn thận và nó chỉ ra dòng 876 chứa (số dòng được hiển thị):
875 5.56786450
876 Error: Could not calculate value.
878 0.0316213
Vì bất kỳ lý do nào (có thể tệp được tạo bởi tập lệnh bị trục trặc). Chuỗi phương pháp LINQ của tôi tất nhiên sẽ ném một ngoại lệ. Vấn đề là, làm thế nào để tôi tìm ra yếu tố nào của danh sách gây ra ngoại lệ, và giá trị của nó là gì?
Để làm rõ, nếu thay vào đó tôi sử dụng một cho vòng lặp:
var data = new List<double>();
foreach(var row in file_contents)
{
var d = double.Parse(row);
data.Add(d);
}
Sau đó, ngoại trừ sẽ làm nổi bật các chuỗi trong đó kêu gọi double.Parse
, và tôi sẽ có thể di chuyển chuột qua row
để dễ dàng nhìn thấy những gì các vấn đề đầu vào là.
Tôi có thể, tất nhiên, sử dụng Resharper để chuyển đổi các câu lệnh LINQ của tôi thành các vòng lặp, sau đó gỡ lỗi chúng, nhưng có cách nào tốt hơn không?
Loại LINQ nào? EF hoặc LINQ to SQL? –