我有一个全局linq扩展方法,该方法从给定列表中检索最具代表性的元素。这是示例:
public static T GetMostRepresentedElement<T, U>(this IEnumerable<U> _Collection, Func<U, T> _GetElem)
{
return _Collection.GroupBy(e => _GetElem(e))
.Select(f => new
{
Count = f.Count(),
Elem = f.Key
})
.OrderByDescending(g => g.Count)
.First()
.Elem;
}
碰巧这个代码块抛出异常:
首先:序列不包含任何元素StackTrace:在System.Linq.Enumerable.First [TSource](IEnumerable1源),在IHMTools.Utilities.LinqExtensions.GetMostRepresentedElement [T,U](IEnumerable1 _Collection,Func2 _GetElem)
我怎么可能使这种方法安全?我是否必须对此方法进行修复,还是最好还是小心我发送给该方法的数据?
如果集合为空,First()
将抛出您收到的异常。您可以改用FirstOrDefault()
返回T
空案例的默认值。
由于您的LINQ涉及很多,您最好尽早退出以处理该案件,然后您也可以避免注释者指出的空案件。就像是if (!_Collection.Any()) return default(T);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句