我有一个简单的抽象枚举类:
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本身( - &gt;作为IEnumerable)。
但这不起作用:
public static IEnumerable<T> GetValues() {
return _values;
}
因为我当然不能隐含地将HashSet
转换为IEnumerable<T>
。我能想到的唯一方法是循环遍历HashSet并产生每个元素,但我想知道是否有办法自动执行此操作,例如当您隐式地将列表强制转换为IEnumerable<T>
时。
答案 0 :(得分:6)
您可以隐式地将HashSet<T>
转换为IEnumerable<T>
,因为HashSet与其他通用集合类型一样,实现了IEnumerable<T>
。
但是,由于显而易见的原因,您无法将HashSet<U>
转换为IEnumerable<T>
,除非U
可转换为T
(在这种情况下,您可以使用隐式协变转换)
您的HashSet
是(但可能不应该)Enumeration<T>
的集合,而不是T
。
答案 1 :(得分:0)
public static IEnumerable<T> GetValues()
{
return _values.Select(e => e._value);
}