好像沒人處理:
如果不是,我怎樣才能讓顯示名稱枚舉變量?
我能想到的某種枚舉映射和擴展的方法可能像這樣工作:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
public enum Foo
{
One = 1,
Two = 2,
}
public static class ExtensionMethods
{
private static readonly Dictionary<Enum, string> s_EnumMap = new Dictionary<Enum, string>
{
{ Foo.One, string.Format("{0} - {1}","Option One", 1) },
{ Foo.Two, string.Format("{0} - {1}","Option Two", 2) }
};
public static String ConvertToString(this Enum eff)
{
return s_EnumMap[eff];
}
}
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine(Foo.One.ConvertToString());
Console.WriteLine(Foo.Two.ConvertToString());
}
}
}
整數1
和2
當然可以通過例如取代靜態變量,如MyClass.myVariable
。如果這是您使用此代碼的方式,那麼請記住,s_EnumMap將存儲MyClass.myVariable
變量在您首次使用ExtensionMethods
類時(即MyClass
的靜態字段得到初始化時)所具有的值。因此,修改代碼:
public MyClass
{
public static int myVariable = 5;
}
public static class ExtensionMethods
{
private static readonly Dictionary<Enum, string> s_EnumMap = new Dictionary<Enum, string>
{
{ Foo.One, string.Format("{0} - {1}","Option One", MyClass.myVariable) },
{ Foo.Two, string.Format("{0} - {1}","Option Two", 2) }
};
public static String ConvertToString(this Enum eff)
{
return s_EnumMap[eff];
}
}
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine(Foo.One.ConvertToString());
Console.WriteLine(Foo.Two.ConvertToString());
MyClass.myVariable = 100;
Console.WriteLine(Foo.One.ConvertToString());
Console.WriteLine(Foo.Two.ConvertToString());
}
}
會導致成:
方案一 - 5
方案二 - 2
方案一 - 5
方案二 - 2
雖然在註釋掉前兩個Console.WriteLine
之後,輸出結果爲:
方案一 - 100
方案二 - 2
所以,如果你想dynamicaly那麼你必須實現某種邏輯更新s_EnumMap`反應的MyClass.myVariable
變化,但只要我不不知道更多關於你想達到的目標,我無法提供更好的答案。
你的意思是如何在enum中使用[attributes](http://stackoverflow.com/q/1799370/1997232)? – Sinatr 2014-10-17 12:18:44
@Sinatr我猜想Display是一個屬性。更新的問題。 – 2014-10-17 12:20:12
我不認爲你可以讓它們變化,它們需要在編譯時知道 – 2014-10-17 12:21:14