【发布时间】:2013-07-26 13:06:35
【问题描述】:
我有一个简单的抽象枚举类:
public abstract class Enumeration<T> {
protected readonly T _value;
private static readonly HashSet<Enumeration<T>> _values
= new HastSet<Enumeration<T>>();
protected Enumeration(T value) {
_value = value;
_values.Add(this);
}
}
现在我想要一个方法返回 HashSet 中的每个元素,但不返回 HashSet 本身( -> 作为 IEnumerable)。
但这不起作用:
public static IEnumerable<T> GetValues() {
return _values;
}
因为我当然不能将HashSet 隐式转换为IEnumerable<T>。我能想到的唯一方法是遍历 HashSet 并产生每个元素,但我想知道是否有一种方法可以自动执行此操作,例如将列表隐式转换为 IEnumerable<T>。
【问题讨论】:
-
你可以做
_yourHashSet.AsEnumerable()。但我不是 100% 确定,但它可以提供由 hashset 删除的重复项 -
HashSet 是可枚举的。你的确切问题是什么?为什么要将
this添加到哈希集_values.Add(this);? -
@wudzik 哎呀。我的错!我尝试使用 AsEnumerable() 但它不起作用,因为我无法将 IEnumerable
> 转换为 IEnumerable - 结果我必须更改返回值。很明显,我需要睡觉。 :// -
@lazyberezovsky 因为它是一个枚举,我不想使用反射来获取所有定义的字段。 ;)
标签: c# .net linq collections casting