var minVal = lst.Count() > 0 ? lst.Min() : 0;
你权权是纠结逼格?
回复完才看到你的....英雄所见略同
@有道之士: 有代码洁癖
你这样子做,还是要从一个大的数据集合过滤之后,再进行可空的判断的。
var minVal = (lst.Count > 0)?lst.Min():null;
研究研究扩展方法嘛
你集合没元素了,你要Min返回什么?
但是过滤之前,我不知道有没有元素的啊。所以,我觉得应该要实现一个扩展方法,如果没有元素,则返回默认值。
@dotnetgeek:
public static class Bigger { public static T GaoBiggerMin<T>(this IEnumerable<T> target,T defaultValue) where T:IComparable<T> { if(target==null) return defaultValue; var source=target.ToList(); if(source.Count==0) return defaultValue; var retValue=source[0]; for(int i=1;i<source.Count;i++) { retValue=retValue.CompareTo(source[i])>0?source[i]:retValue; } return retValue; } }
自己写个Min扩展啊
有理。
var lst =new List<int>();
var minVal = lst.Any()?lst.Min():0; //如果为序列不存在任何元素,就返回默认值0
Console.WriteLine(minVal);
Any方法能用于任何一个泛型序列(IEnumerable<T>),其内部使用迭代器尝试获取下一个元素,如果能获取到马上返回true,反之返回false,无需遍历整个序列。下面是反编译Any方法的代码:
1 public static bool Any<TSource>(this IEnumerable<TSource> source) 2 { 3 if (source == null) 4 { 5 throw Error.ArgumentNull("source"); 6 } 7 using (IEnumerator<TSource> enumerator = source.GetEnumerator()) 8 { 9 if (enumerator.MoveNext()) 10 { 11 return true; 12 } 13 } 14 return false; 15 }
还能咋写,自己二次扩展一下。要么还是老老实实先判断吧。
这样写呗:
var minVal = lst.Min(i => (int?) i);
这样空集合的时候就返回null了。
或者空集合的时候你要数字的话
var minVal = lst.Min(i => (int?) i) ?? 0;
另外,如果要效率的话,是不能先取Count()的,
var minVal = lst.IsEmpty() ? 0 : lst.Min();