Atr*_*gma 1 .net c# linq collections casting
我有一个简单的抽象枚举类:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想有一个方法返回HashSet中的每个元素,但不返回HashSet本身( - >作为IEnumerable).
但这不起作用:
public static IEnumerable<T> GetValues() {
return _values;
}
Run Code Online (Sandbox Code Playgroud)
因为我无法隐含地转换HashSet为IEnumerable<T>,当然.我能想到的唯一方法是循环遍历HashSet并产生每个元素,但我想知道是否有一种方法可以自动执行此操作,就像您隐式将列表转换为IEnumerable<T>.
你可以隐式转换HashSet<T>为IEnumerable<T>,因为HashSet就像ewvery其他泛型集合类型一样IEnumerable<T>.
但是,由于显而易见的原因,您无法转换HashSet<U>为IEnumerable<T>,除非U可转换为T(在这种情况下您可以使用隐式协变转换).
你HashSet是(但可能不应该)的集合Enumeration<T>,而不是T.