2012-11-08 6 views
21

tôi có mã này:Làm cách nào để hàm tối đa của LINQ trả về giá trị mặc định nếu chuỗi trống?

List<int> myList = new List<int>(); 
var max = myList.Max(); 
Console.Write(max); 

Tôi muốn điều đó để đảm bảo rằng nếu không có các yếu tố trong danh sách đó nên sử dụng các giá trị mặc định cho int (0). Nhưng thay vào đó, một số InvalidOperationException đang bị ném, cho biết rằng "Chuỗi không chứa phần tử".

Tất nhiên tôi có thể sử dụng Any hoặc cú pháp truy vấn (như trong here). Nhưng tôi muốn làm điều đó bằng cách sử dụng cú pháp thông thạo.

Làm cách nào để khắc phục sự cố này?

Trả lời

52

Hãy thử điều này:

var myList = new List<int>(); 
var max = myList.DefaultIfEmpty().Max(); 
Console.Write(max); 

DefaultIfEmpty kiểm tra -method LINQ nếu chuỗi rỗng. Nếu đúng như vậy, nó sẽ trả về một chuỗi đơn: Một chuỗi chứa chính xác một phần tử. Phần tử này có giá trị mặc định của kiểu chuỗi. Nếu trình tự chứa các phần tử, thì phương thức DefaultIfEmpty sẽ đơn giản trả về chính chuỗi đó.

Xem MSDN để biết thêm thông tin

1

Hơi tại một tiếp tuyến nhưng có lẽ vẫn hữu ích .. giải pháp khác là đưa giá trị vào loại có thể vô hiệu;

var myInt = new Int[0].Max(i=>(int?)i);//myInt == null