2012-11-08 12 views
21

Ho questo codice:Come rendere la funzione Max di LINQ restituire il valore predefinito se la sequenza è vuota?

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

voglio che per garantire che se non ci sono elementi nella lista che dovrebbe utilizzare il valore predefinito per int (0). Invece viene lanciato uno InvalidOperationException, affermando che la "Sequenza non contiene elementi".

Ovviamente potrei usare Any o la sintassi della query (come in here). Ma voglio farlo usando la sintassi fluente.

Come posso risolvere questo?

risposta

52

Prova questo:

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

DefaultIfEmpty controlli -Metodo di LINQ se la sequenza è vuota. Se questo è il caso, restituirà una sequenza singleton: una sequenza che contiene esattamente un elemento. Questo elemento ha il valore predefinito del tipo della sequenza. Se la sequenza contiene elementi, il metodo DefaultIfEmpty restituirà semplicemente la sequenza stessa.

Vedere MSDN per ulteriori informazioni

1

Leggermente tangente ma forse ancora utile..un'altra soluzione consiste nel trasmettere il valore al tipo nullable;

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