星空网 > 软件开发 > ASP.net

在复杂类的集合(Collection)中作比较

在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较、取最大值或最小值。

举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素:

public class Class<T> where T : struct{  public T? Value { get; set; }}

var ints = new List<Class<int>>(){  new Class<int>() { Value = 2 },  new Class<int>() { Value = 10 },  new Class<int>() { Value = 5 },  new Class<int>() { Value = 10 },};

如果不使用.Net高级特性的做法通常是:

var max = new Class<int>() { Value = Int32.MinValue };foreach (var i in ints){  if (i.Value != null && i.Value > max.Value)  {    max = i;  }}return max;

这样的写法,除了烦琐无味以外,还有一个很明显的Bug,虽然在上面这个例子中暴露不出来,但是假设集合没有一个元素,或者组成如下:

var ints = new List<Class<int>>(){  new Class<int>() { Value = null },  new Class<int>() { Value = null },  new Class<int>() { Value = null },};

此时此刻,我们想要返回的是包含null值的元素,而上述方法则带给我们包含Int32最小值的元素,此元素并不在ints集合中!

 

很多同学会想使用Linq框架的Max(),比如:

var max = ints.Max(i => i.Value);

但事实上这个方法只能返回元素的Value成员变量,也就是int?类型,所以这也不是我们想要的。

正确的方法应该是:

var max = ints.First(i => i.Value == ints.Max(j => j.Value));

 




原标题:在复杂类的集合(Collection)中作比较

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流