【发布时间】:2017-08-30 21:29:40
【问题描述】:
假设我定义了这个enum,其中几个成员具有相同的基础值:
enum Number
{
One = 1,
Eins = 1,
Uno = 1
}
如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则您的代码不应对该方法将返回哪个名称做出任何假设。
例如,
var number = Number.One;
Console.WriteLine(number);
给我以下输出:
恩斯
打印所有枚举成员,
Console.WriteLine($"{Number.One} {Number.Eins} {Number.Uno}");
产生以下输出:
恩恩恩恩斯恩恩斯
但是,取每个成员的nameof,
Console.WriteLine($"{nameof(Number.One)} {nameof(Number.Eins)} {nameof(Number.Uno)}");
给出以下结果:
一个Eins Uno
显然enum 成员是可分离的。我可以利用这种分离,即有没有任何方法我可以将特定的Number 成员分配给变量,并且只要变量是访问了吗?
【问题讨论】:
-
一开始你为什么会出现这种情况?
-
看起来是摆脱枚举并使用全球化/资源文件的好地方。
-
好吧,也许我不应该在示例中使用不同的语言。我的问题与国际化无关。
-
如果您将变量转换为基础类型 (int),您将无法做到,否则,您可以查看 Enum.GetNames(Type) 函数
-
@AndersGustafsson - 当您被遗留代码困扰时,选项有时会受到限制,除非您有资源来重构和正确实现某些东西(通常情况并非如此)。