pavelhodek / morelinq

Automatically exported from code.google.com/p/morelinq
Apache License 2.0
0 stars 0 forks source link

MaxByOrDefault #96

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Currently, MaxBy will throw an exception if executed on an empty enumerable.  I 
would like a way to provide it with a default value to use, or have it use 
default(TSource).

Example usage:
var emptyEnumerable = Enumerable.Empty<Person>();
var result = emptyEnumerable.MaxByOrDefault(person => person.Age);
Assert.Equal(0, result);

result = emptyEnumerable.MaxBy(person => person.Age, 10);
Assert.Equal(10, result);

Original issue reported on code.google.com by mi...@zoltu.net on 8 Dec 2014 at 8:12

GoogleCodeExporter commented 8 years ago
I also think that Max, Min, MaxBy and MinBy would benefit from having 
...IsDefault methods.

I think though that if returning a value type, the return type should be a 
nullable if possible.

Original comment by rmy...@gmail.com on 25 Jul 2015 at 12:36

GoogleCodeExporter commented 8 years ago
If you want null out for a value type then you can achieve this by

emptyEnemurable.MaxByOrDefault<Nullable<UInt32>>(person => person.Age);
Assert.Equal(null, result);

or

emptyEnumerable.MaxBy<Nullable<UInt32>>(person => person.Age, null);
Assert.Equal(null, result);

Original comment by mi...@zoltu.net on 25 Jul 2015 at 5:19