发现在C#

问题描述:

鉴于从微软例如下面的代码(属性)集合的最小值:发现在C#

public class EngineMeasurementCollection : Collection<EngineMeasurement> 
{ 
    public EngineMeasurementCollection() 
    { 
     Add(new EngineMeasurement { Speed = 1000, Torque = 100, Power = 20 }); 
     Add(new EngineMeasurement { Speed = 2000, Torque = 160, Power = 60 }); 
     Add(new EngineMeasurement { Speed = 3000, Torque = 210, Power = 125 }); 
     Add(new EngineMeasurement { Speed = 4000, Torque = 220, Power = 160 }); 
     Add(new EngineMeasurement { Speed = 5000, Torque = 215, Power = 205 }); 
     Add(new EngineMeasurement { Speed = 6000, Torque = 200, Power = 225 }); 
     Add(new EngineMeasurement { Speed = 7000, Torque = 170, Power = 200 }); 
    } 
} 
public class EngineMeasurement 
{ 
    public int Speed { get; set; } 
    public int Torque { get; set; } 
    public int Power { get; set; } 
} 

我如何获得的最小/最大速度或转矩或功率。我需要这个来设置我正在做的图表上的比例尺(WPF工具包图表)。 我想我可以在EngineMeasurementCollection中有一个方法,它遍历每个EngineMeasurement并查看Power(或Speed),但我怀疑有一种更简单的方法?类集合确实有某种Min方法,但是请注意,我并没有试图获得集合的最小值(我不确定这是什么意思),而是一个特定属性的最小值(例如速度)。我确实看到了使用函子Collection.Min。那里有什么可以做的吗?或者与Linq?我对所有方面都感兴趣。 谢谢, 戴夫

奖金的问题(也许这将是明显的我与最小/最大的答案)。有什么选择来决定一个值(例如Speed是否已经在集合中)。从这个例子中不清楚,但可能是这样的情况,如果你已经有了一个给定的自变量的数据(例如时间),那么你就不再需要了。那么有没有像Collection.Contains(“指定你感兴趣的属性”)?

using System.Linq; 

var collection = new EngineMeasurementCollection(); 
int maxSpeed = collection.Max(em => em.Speed); 

参见:
LINQ MSDN documentation
LINQ to Objects 5 Minute Overview

为了增加gaearon的回答是:

int minSpeed = collection.Min(em => em.Speed); 

,会得到最低限度。但你可能会想出你自己的;)

你可以看看this link on MSDN's site它会发现最大/最小值使用linq。

要回答你的问题有关“包含”方法的类型,你可以使用Any方法,如果你想它的存在布尔指示,或者你可以使用FirstOrDefault找到第一EngineMeasurement出现满足条件。如果它存在,它将返回实际的对象,否则它将返回该对象的默认值(在这种情况下为null)。

bool result = collection.Any(m => m.Speed == 2000); // true 

// or 

var em = collection.FirstOrDefault(m => m.Speed == 2000); 
if (em != null) 
    Console.WriteLine("Torque: {0}, Speed: {1}", em.Torque, em.Speed);