3 回答

TA貢獻1836條經驗 獲得超13個贊
這是我用于此特定目的的幾種擴展方法,我將它們重寫為使用您的StringValueAttribute,但像Oliver一樣,我在代碼中使用了DescriptionAttribute。
public static T FromEnumStringValue<T>(this string description) where T : struct {
Debug.Assert(typeof(T).IsEnum);
return (T)typeof(T)
.GetFields()
.First(f => f.GetCustomAttributes(typeof(StringValueAttribute), false)
.Cast<StringValueAttribute>()
.Any(a => a.Value.Equals(description, StringComparison.OrdinalIgnoreCase))
)
.GetValue(null);
}
在.NET 4.5中,這可以變得稍微簡單一些:
public static T FromEnumStringValue<T>(this string description) where T : struct {
Debug.Assert(typeof(T).IsEnum);
return (T)typeof(T)
.GetFields()
.First(f => f.GetCustomAttributes<StringValueAttribute>()
.Any(a => a.Value.Equals(description, StringComparison.OrdinalIgnoreCase))
)
.GetValue(null);
}
要調用它,只需執行以下操作:
Als result = ComboBox.SelectedValue.FromEnumStringValue<Als>();
相反,這是一個從枚舉值獲取字符串的函數:
public static string StringValue(this Enum enumItem) {
return enumItem
.GetType()
.GetField(enumItem.ToString())
.GetCustomAttributes<StringValueAttribute>()
.Select(a => a.Value)
.FirstOrDefault() ?? enumItem.ToString();
}
并稱之為:
string description = Als.NietBeantwoord.StringValue()
- 3 回答
- 0 關注
- 543 瀏覽
添加回答
舉報