2012-11-08 11 views
21

mam ten kod:Jak ustawić funkcję Max LINQ w powrocie do wartości domyślnej, jeśli sekwencja jest pusta?

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

Chcę, aby upewnić się, że jeśli nie ma żadnych elementów w wykazie powinno używać wartości domyślnej dla int (0). Ale zamiast tego jest rzucany InvalidOperationException, stwierdzając, że "Sekwencja nie zawiera elementów".

Oczywiście mógłbym użyć Any lub składni zapytania (jak w here). Ale chcę to zrobić za pomocą płynnej składni.

Jak mogę to naprawić?

Odpowiedz

52

Spróbuj tego:

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

LINQ za DefaultIfEmpty -method sprawdza, czy sekwencja jest pusta. Jeśli tak jest, to zwróci pojedynczą sekwencję: sekwencję zawierającą dokładnie jeden element. Ten jeden element ma domyślną wartość typu sekwencji. Jeśli sekwencja zawiera elementy, metoda DefaultIfEmpty po prostu zwróci samą sekwencję.

Zobacz MSDN dla dalszych informacji

1

Lekko na stycznej, ale może nadal przydatne .. Innym rozwiązaniem jest rzucenie wartości do typu zerowego;

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