2012-04-17 67 views
2

我對貨幣的目的MVC EnumMember自定義字符串

[DataContract] 
public enum PaymentCurrency 
{ 

    /// <summary> 
    /// Canadian dollar. 
    /// </summary> 
    [EnumMember(Value = "CA$")] 
    CAD = 1, 
} 

這套枚舉當我想顯示的特定項目,例如CAD,我想讓它顯示爲「CA $」字符串。我試圖通過給它賦值,它不起作用,我沒有太多線索。有任何想法嗎 ?謝謝 。

回答

1

value參數的EnumMember屬性是有序列化。不顯示目的。見MSDN Documentation

要獲得該值,您必須將其序列化,然後解析XML。

另一種方式是寫自己的輔助方法,並利用C#內置DescriptionAttribute

public enum PaymentCurrency 
{ 
    [DescriptionAttribute("CA$")] 
    CAD, 
    [DescriptionAttribute("US$")] 
    USD, 
    EURO 
} 

然後使用一個EnumUtils類自己的輔助方法,你可以這樣做:

public class EnumUtils 
{ 
    public static string stringValueOf(Enum value) 
    { 
    var fi = value.GetType().GetField(value.ToString()); 
    var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
    if (attributes.Length > 0) 
    { 
     return attributes[0].Description; 
    } 
    else 
    { 
     return value.ToString(); 
    } 
    } 

    public static object enumValueOf(string value, Type enumType) 
    { 
    string[] names = Enum.GetNames(enumType); 
    foreach (string name in names) 
    { 
     if (stringValueOf((Enum)Enum.Parse(enumType, name)).Equals(value)) 
     { 
      return Enum.Parse(enumType, name); 
     } 
    } 

    throw new ArgumentException("The string is not a description or value of the specified enum."); 
    } 
}