2013-06-20 37 views
2

我有一個擴展方法用於枚舉無法隱式轉換類型與擴展方法

public static IEnumerable<T> GetFlags<T>(this T value) where T : struct 
    { 
     CheckIsEnum<T>(true); 
     foreach (T flag in Enum.GetValues(typeof(T)).Cast<T>()) 
     { 
      if (value.IsFlagSet(flag)) 
       yield return flag; 
     } 
    } 

我努力得到的結果是這樣的:

Zone_Status_ZoneConditionFlagEnum flags = (Zone_Status_ZoneConditionFlagEnum)flagsRaw; 

List<Zone_Status_ZoneConditionFlagEnum> ZoneConditionFlags_List = (List<Zone_Status_ZoneConditionFlagEnum>)flags.GetFlags(); 

,但我得到

NX584(NX584Test)->Error parsing message: Cannot implicitly convert type [Digicom.NX584Engine.Messages.Zone_Status_ZoneConditionFlagEnum] to System.Collections.Generic.List`1[Digicom.NX584Engine.Messages.Zone_Status_ZoneConditionFlagEnum]. 

回答

2

我不清楚爲什麼你會得到的錯誤 - 但是你不能投出結果GetFlags<T>List<T>,因爲它不返回List<T>。最簡單的解決將是:

var ZoneConditionFlags_List = flags.GetFlags().ToList(); 

如果不能正常工作,請給新的錯誤消息。

或者,您可以更改GetFlags,以便實際返回List<T>而不是使用迭代器塊。

+0

ToList方法確實修復了錯誤。謝謝! –

0

GetFlags返回IEnumerable<T>,而不是一個List<T>,你不能這裏。

你應該,但是,能夠構建從結果列表:這裏

List<Zone_Status_ZoneConditionFlagEnum> ZoneConditionFlags_List = flags.GetFlags().ToList(); 

但是,錯誤不匹配的代碼完全,應該抱怨一個IEnumerable不能定投,但是它說的是枚舉類型。你確定這是正確的代碼嗎?

1

這裏的第一個問題是序列與列表不同,如果你需要一個列表,或者列表,或GetFlags()後添加.ToList(),即

var ZoneConditionFlags_List = flags.GetFlags().ToList(); 

然而,更大的問題是,你不能使用在一般上下文IsFlagSet;該方法沒有爲任意的T : struct定義。

就我個人而言,我認爲你最好只是把它當作一個[Flags] enum;我假設你有現在的代碼需要列表而不是單個值?

相關問題