将集合(HashSet)隐式转换为IEnumerable<;T>;
本文关键字:IEnumerable gt lt 转换 集合 HashSet | 更新日期: 2023-09-27 18:24:59
我有一个简单的抽象枚举类:
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>
。
您可以隐式地将HashSet<T>
转换为IEnumerable<T>
,因为HashSet与其他任何泛型集合类型一样,实现了IEnumerable<T>
。
但是,由于显而易见的原因,您无法将HashSet<U>
转换为IEnumerable<T>
,除非U
可转换为T
(在这种情况下,您可以使用隐式协变转换)。
您的HashSet
是(但可能不应该是)Enumeration<T>
的集合,而不是T
。
public static IEnumerable<T> GetValues()
{
return _values.Select(e => e._value);
}