C# 将集合(哈希集)隐式转换为IEnumerable<;T>;
我有一个简单的抽象枚举类:C# 将集合(哈希集)隐式转换为IEnumerable<;T>;,c#,.net,linq,collections,casting,C#,.net,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 val
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);
}
}
公共抽象类枚举{
受保护的只读T_值;
私有静态只读哈希集\u值
=新HastSet();
受保护枚举(T值){
_价值=价值;
_加上(这个);
}
}
现在我想要一个方法,它返回HashSet中的每个元素,而不是HashSet本身(->作为IEnumerable)
但这不起作用:
public static IEnumerable<T> GetValues() {
return _values;
}
公共静态IEnumerable GetValues(){
返回_值;
}
当然,因为我不能隐式地将
HashSet
转换为IEnumerable
。我能想到的唯一方法是循环遍历HashSet并生成每个元素,但我想知道是否有一种方法可以自动做到这一点,比如当您将列表隐式地强制转换为IEnumerable
时,您可以隐式地将HashSet
转换为IEnumerable
,因为HashSet,与EW所有其他泛型集合类型一样,实现了IEnumerable
但是,由于明显的原因,您无法将HashSet
转换为IEnumerable
,除非U
可转换为T
(在这种情况下,您可以使用隐式协变转换)
您的
HashSet
是(但可能不应该是)一个枚举的集合,而不是T
您可以隐式地将HashSet
转换为IEnumerable
,因为HashSet与EW任何其他泛型集合类型一样,实现了IEnumerable
public static IEnumerable<T> GetValues()
{
return _values.Select(e => e._value);
}
但是,由于明显的原因,您无法将HashSet
转换为IEnumerable
,除非U
可转换为T
(在这种情况下,您可以使用隐式协变转换)
您的HashSet
是(但可能不应该是)枚举的集合,而不是T
公共静态IEnumerable GetValues()
public static IEnumerable<T> GetValues()
{
return _values.Select(e => e._value);
}
{
返回_值。选择(e=>e._值);
}
公共静态IEnumerable GetValues()
{
返回_值。选择(e=>e._值);
}
您可以使用hashset.AsEnumerable()执行。但我不是100%确定,但它可以提供由hashsetHashSet删除的重复项HashSet是可枚举的。你到底有什么问题?为什么要将this
添加到hashset\u值中。添加(this)代码>?@wudzik哇。我的错!我尝试使用AsEnumerable(),但没有成功,因为我无法将IEnumerable转换为IEnumerable-结果我不得不更改返回值。显然,我需要睡觉/@lazyberezovsky,因为它是一个枚举,我不想使用反射来获取所有定义的字段您可以使用hashset.AsEnumerable()执行\u操作。但我不是100%确定,但它可以提供由hashsetHashSet删除的重复项HashSet是可枚举的。你到底有什么问题?为什么要将this
添加到hashset\u值中。添加(this)代码>?@wudzik哇。我的错!我尝试使用AsEnumerable(),但没有成功,因为我无法将IEnumerable转换为IEnumerable-结果我不得不更改返回值。显然,我需要睡觉/@lazyberezovsky,因为它是一个枚举,我不想使用反射来获取所有定义的字段