【发布时间】:2016-06-16 20:39:49
【问题描述】:
我已经在 C# 中工作了大约 8 个月,如果这是愚蠢的,请原谅我......
我有一个枚举,我需要在一个类中多次使用字符串值。所以我想使用 Enum.GetName() 将它设置为一个没有问题的字符串变量。我就是这么干的……
private string MyEnumString = Enum.GetName(typeof(MyEnum), MyEnum.Name);
而且效果很好。
但是我试图更好地保护它,因为这个特定的 Enum 比所有其他 Enum 都更重要,如果我不小心以某种方式更改了字符串值,那将不是一件好事,所以我尝试将其设为 const 像这样。
private const string MyEnumString = Enum.GetName(typeof(MyEnum), MyEnum.Name);
在我看来这似乎很好,因为它应该在编译时就知道了。
但 Visual Studio 2013 会引发错误,提示“无法解析符号 GetName”。我知道当它没有被标记为“const”时它可以工作。
所以这让我有两个问题? 为什么它松散引用 GetName 枚举? (经过一番研究,我怀疑这与 GetName 是一种方法有关,而不是 Enum 类的属性,但错误消息对我来说没有意义)
最后有没有办法将 MyEnum.Name 的名称读取为 const 字符串,而不是我正在做的事情?
【问题讨论】:
-
您可以改用 Visual Studio 2015 吗?然后你可以使用
nameof... -
“在我看来这似乎很好,因为它应该在编译时就知道了。” - 仅当编译器知道
Enum.GetName做什么,它不知道...(就像它不知道Math.Sqrt做什么一样,所以const double x = Math.Sqrt(2.0);也不会编译。) -
@JonSkeet 不幸的是,我们暂时必须坚持使用 Visual Studio 2013,但我将不得不研究“nameof”,因为我们将在年底前进入 2015 年。
标签: c# enums compiler-errors constants