我有一個簡單的抽象枚舉類:隱式轉換集合(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