C# 不支持MinOrDefault扩展
我只是想确认一下C# 不支持MinOrDefault扩展,c#,linq,C#,Linq,我只是想确认一下 Collection.Min(p => p.Value); 仅当集合不为空且没有MinOrEmpty或类似内容时才有效,对吗?如果集合包含可为空的类型(引用类型或可为空的值),则Min方法将在集合为空时返回null 如果集合包含不可为空的值类型,则Min方法将在集合为空时抛出invalidoOperationException 请注意,在您的示例中,当您将委托传递给Min方法时,行为由委托的返回类型决定,而不是由元素本身的类型决定 (没有,没有内置的MinOrEmpt
Collection.Min(p => p.Value);
仅当集合不为空且没有MinOrEmpty或类似内容时才有效,对吗?如果集合包含可为空的类型(引用类型或
可为空的
值),则Min
方法将在集合为空时返回null
如果集合包含不可为空的值类型,则
Min
方法将在集合为空时抛出invalidoOperationException
请注意,在您的示例中,当您将委托传递给Min
方法时,行为由委托的返回类型决定,而不是由元素本身的类型决定
(没有,没有内置的
MinOrEmpty
方法。不过,有很多简单的替代方法,以获取详细信息。)如果希望返回元素类型的默认值(如果元素类型为空),这很简单:
var min = Collection.Select(p => p.Value).DefaultIfEmpty().Min();
或者,如果需要特定的最小值:
var min = Collection.Select(p => p.Value)
.Concat(Enumerable.Repeat(int.Minvalue, 1)
.Min();
或:
这就是你想要的吗?还不完全清楚
对于非空元素类型的空序列,
Min
和Max
的行为与可空元素类型的空序列稍有不同。当元素类型可为null时,当且仅当序列为空时才返回null值;对于不可为空的元素类型,将抛出invalidoOperationException
。有关详细信息,请参见my。如果序列为空,则计算最小值没有意义。但是,如果要在序列为空时返回特定值,可以这样做(假设您的a计算int
值的最小值):
如果序列为空,它将返回-1,否则它将计算序列的最小值
var min = Collection.Select(p => (int?) p.Value)
.Min(); // min will be the null value if Collection is empty
int defaultMinValue = -1;
var min = Collection.Select(p => p.Value).DefaultIfEmpty(defaultMinValue).Min();