Wenn mit leeren Sequenzen zu tun, ich war überrascht zu erfahren, dass das Verhalten für min oder max unterschiedlich ist, je nachdem, ob die Quellensammlung Elemente sind von value type oder von reference type:Warum ist Enumerable Min oder Max zwischen Sammlungen von Referenz- und Werttypen inkonsistent?
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
Dieser Unterschied von Verhaltensweisen ist schön auf .NET Core implementation of Enumerable extensions zu sehen.
Dies ist jedoch nicht der Fall, wenn man zum Beispiel Jon Skeet's MinBy extension betrachtet, die auf jeden Fall wirft, wie ich es erwartet hätte.
Führt der Unterschied in den Verhaltensweisen nicht zu Verwirrungen? Gibt es einen Vorteil für die Rückgabe von null
Sammlungen von Ref-Typen?
Nur der Vollständigkeit halber, fügen Sie einen Fall 'var nullableCollection = new int? [0];' – xanatos
Guter Punkt! Ein NULL-fähiger Fall wurde hinzugefügt. –
Ich möchte auch wissen, warum '(neues Objekt [0]). Min()' gibt 'null' und' (new int [0]). Min() 'wirft plötzlich' InvalidOperationException' ([Beweis] (https://ideone.com/9NDIob)). @ JonSkeet Antwort antwortet nicht wirklich * warum * Verhalten ist anders. – Sinatr