HashSet或Distinct用于读取对象的List 中的不同属性值

这在某种程度上与此相关( 获取C#列表中的所有唯一项 )问题。

上面的问题是谈论一个简单的数组。 我有从第三方Web服务返回的对象:

public class X { public Enum y {get; set;} } 

我有一个列表这些对象List data; ,总共约100条记录,但可变。 现在我想要属性y列表中的所有可能值,并且我想绑定它做一个CheckBoxList.DataSource (如果有所不同)。

这是最有效的方法吗?

我可以想到两种算法:

 var data = HashSet hashSet = new HashSet(xs.Select(s => sy)); chkBoxList.DataSource = data; 

要么

 var data = xs.Select(s => sy).Distinct(); chkBoxList.DataSource = data; 

我的直觉是HashSet,但我不是百分百肯定。

如果有人有任何想法,愿意接受更好的想法?

HashSet一个,因为它在构造hashset对象之后保持对象,并且预处理它不需要昂贵的操作。

另一方面,每次枚举DataSource时都可能会评估Distinct枚举器,并且将重复删除重复值的所有工作。

如果是一次性操作 – 使用。 Distinct 。 如果要HashSet添加元素 – 请使用HashSet

因为他们没有更好的答案,我将回答我自己的问题。 我决定使用HashSet虽然对于我的结果集大小,性能优势可能很小。 归结到它时,从这里获取的HashSet的定义是:

HashSet是一个包含唯一元素的无序集合。

我想要一个独特无序值集合 。 (课程的马)我也不需要索引,我只想枚举我的设置。

所以它似乎最合适。 将Staffi标记为答案,因为他的信息量最大。