从List 中获取不同的值

我有一个包含Beam类实例的List 。 这些Beam对象中的每一个都具有Elevation属性。

 List Beams = new List {Beam1, Beam2, ...}; public class Beam { public double Elevation; } 

现在我想创建一个包含不同Elevation的List 。 例如,如何编写一个接受Beams列表的方法,如下所示

 var Beam1 = new Beam { Elevation = 320); var Beam2 = new Beam { Elevation = 320); var Beam3 = new Beam { Elevation = 640); var Beam4 = new Beam { Elevation = 0); List Beams = new List {Beam1, Beam2, Beam3, Beam4}; 

并删除重复的高程:

 listOfElevations = {0, 320,640} 

1)使梁工具IComparable:

 public class Beam : IComparable { public double Elevation; //consider changing this to property, btw. public int CompareTo(object obj) { if (obj == null) return 1; Beam otherBeam = obj as Beam; return this.Elevation.CompareTo(otherBeam.Elevation); } } 

2)使用Distinct():

 var listOfElevations = Beams.Distinct().Select(x=> x.Elevation).ToList(); 

使用Linq – 特别是Enumerable.Distinct()方法在这里是关键:

 var listOfElevations = beams.Select(x => x.Elevation) //project to Elevations .Distinct() // pick only distinct ones .ToList(); //make it a list 

使用LinQ非常简单:

 var listOfElevations = Beams.Select(x => x.Elevation).Distinct().ToList(); 

您正在选择Elevation的值,选择Distinct值,将其设置为List,因为它是您的预期输出。

  List Beams = new List {Beam1, Beam2, Beam3, Beam4}; var differentBeams = Beams.Select(b => b.Elevation).Distinct().ToList(); 

使用LINQ另一种方法,如果您有多个属性并希望获得唯一列表,这可能很有用

 beams.GroupBy(x => x.Elevation).Select(g => g.Key);