Quando si tratta di vuote sequenze, sono rimasto sorpreso di scoprire che il comportamento per min o max è diversa a seconda che gli elementi di raccolta fonte sono di value type o di reference type:Perché Enumerable Min o Max è incoerente tra insiemi di riferimento e tipi di valore?
var refCollection = new object[0];
var valCollection = new int[0];
var nullableCollection = new int?[0];
var refMin = refCollection.Min(x => x); // null
var valMin = valCollection.Min(); // InvalidOperationException
var nullableMin = nullableCollection.Min(); // null
Questa differenza di comportamenti è ben visto su .NET Core implementation of Enumerable extensions.
Questo, tuttavia, non è il caso quando si guarda Jon Skeet's MinBy extension, ad esempio, che getta su entrambi i casi come mi sarei aspettato.
La differenza di comportamento non causa solo confusioni? C'è qualche vantaggio nel restituire null
per le raccolte di tipi ref?
Solo per completezza, aggiungere un caso 'var nullableCollection = new int? [0];' – xanatos
Buon punto! Aggiunto un caso nullable. –
Mi piacerebbe anche sapere perché '(nuovo oggetto [0]). Min()' restituisce 'null' e' (new int [0]). Min() 'getta improvvisamente' InvalidOperationException' ([proof] (https://ideone.com/9NDIob)). @JonSkeet answer non risponde veramente * perché * il comportamento è diverso. – Sinatr