2014-03-05 175 views
1

我想爲Enum添加新/擴展方法,但擴展方法未顯示在智能感知方法列表上。請幫助這裏是我的代碼。枚舉擴展方法未顯示

擴展:

public static class EnumExtensions 
    { 
     public static string GetDescriptionAttr(this Enum value,string key) 
     { 
      var type = value.GetType(); 
      var memInfo = type.GetMember(key); 
      var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), 
       false); 
      var description = ((DescriptionAttribute)attributes[0]).Description; 
      return description; 
     } 
    } 

嘗試呼叫從其它類中的結果(包括主叫方和擴展是在同一個項目)

enter image description here

回答

3

擴展方法可以應用於實例只有

public static class EnumExtensions { 
    // This extension method requires "value" argument 
    // that should be an instance of Enum class 
    public static string GetDescriptionAttr(this Enum value, string key) { 
    ... 
    } 
} 

... 

public enum MyEnum { 
    One, 
    Two, 
    Three 
} 

Enum myEnum = MyEnum.One; 

// You can call extension method on instance (myEnum) only 
myEnum.GetDescriptionAttr("One"); 
+0

真棒!也感謝解釋。這解決了我的困惑。 –

3

您應該對您的枚舉實例使用擴展方法。 我有這樣的代碼,它工作正常:

public static string GetDescription(this Enum value) 
{ 
    var attributes = 
     (DescriptionAttribute[])value.GetType().GetField(value.ToString()) 
     .GetCustomAttributes(typeof(DescriptionAttribute), false); 
    return attributes.Length > 0 ? attributes[0].Description : value.ToString(); 
} 

而且使用這種方法的顯示位置:

MyEnum myE = MyEnum.OneOfItemsOfEnum; 
string description = myE.GetDescription();