好像没人处理:
如果不是,我怎样才能让显示名称枚举变量?
我能想到的某种枚举映射和扩展的方法可能像这样工作:
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