我的VM中有一个简单的linq:
public int MaxItem => Collection.Max((c)=> c.Count);
如果Collection
的项目已满,则没有任何问题。但如果我需要像这样清除它:
Collection.Clear();
然后我有例外:
System.InvalidOperationException
如何解决?
答案 0 :(得分:4)
Max
(和Min
)未定义为空集,因此唯一合理的行为是在序列没有项时抛出异常。
如果您需要对集合进行特殊处理 - 检查空(或“满条件”)条件并调用不同的方法:
public int MaxItem => Collection.IsFullOfItems ?
Collection.Max((c)=> c.Count) : 0;
(如果您没有自定义Any()
属性,则可以对大多数集合类型使用Count != 0
或IsFullOfItems
或者,如果Collection
是您的自定义类,则可以在该类中实现自己的Max(Func<bool, T> predicate)
方法,该方法将用于Collection.Max
调用,而不是默认的Enumerable.Max
扩展方法