我試圖創建一個擴展方法,該方法將返回包含所有Description
屬性的List<string>
屬性,僅用於給定的[Flags] Enum
的設置值。從標記的枚舉中獲取描述屬性
例如,假設我有以下枚舉在我的C#代碼中聲明:
[Flags]
public enum Result
{
[Description("Value 1 with spaces")]
Value1 = 1,
[Description("Value 2 with spaces")]
Value2 = 2,
[Description("Value 3 with spaces")]
Value3 = 4,
[Description("Value 4 with spaces")]
Value4 = 8
}
,然後有一個變量設置爲:
Result y = Result.Value1 | Result.Value2 | Result.Value4;
因此,呼叫我想創造會是:
List<string> descriptions = y.GetDescriptions();
而最終的結果將是:
descriptions = { "Value 1 with spaces", "Value 2 with spaces", "Value 4 with spaces" };
我已經創建了一個擴展方法得到單一描述屬性對於不能有多個標誌設置是大意如下的枚舉:
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
System.Reflection.FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =
Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
而且我已經找到了一些答案在線如何獲取給定枚舉類型的所有Description屬性(例如here),但是我在編寫通用擴展方法時遇到問題,僅返回的描述列表,僅用於設置屬性。
任何幫助將非常感激。
謝謝!
我編輯您的標題,因爲當你*使用* C#你的問題不是*約* C#(這是沒有必要使標籤你的標題,除非它是它的一個組成部分) – slugster
@slugster,我把它放在我的標題中,因爲我想提到它是ac#問題而不是Java /某些其他語言 - 我正在尋找一種擴展方法語言,所以我認爲它是適當的。 –