我有一个简单的抽象枚举类:隐式转换集合(HashSet的)到IEnumerable的<T>
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删除的副本 – wudzik
HashSet **是**可枚举的。你确切的问题是什么?为什么要添加'this'来hashset'_values.Add(this);'? –
@wudzik WHOOPS。我的错!我试着用AsEnumerable(),但它没有工作,因为我不能将IEnumerable>转换为IEnumerable - 事实证明,我不得不改变返回值。我显然需要睡觉。 :/ –
Atrotygma