当我从resx声明const时,出现编译错误。
private const string ERROR_MESSAGE = MyResource.ResourceManager.GetString("resx_key");
我理解为什么会出现此编译消息,但是有一个技巧可以从资源中声明const吗?
答案 0 :(得分:3)
那是因为const
必须是一个编译时间常数。引用MSDN文档:
常量是不变的值,在编译时是已知的,并且在程序生命周期内不会更改。
来自https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constants
在您的情况下,该值来自方法调用。因此,编译时可能无法得知结果。这样做的原因是将常数值直接替换为IL代码。
实际上,当编译器在C#源代码中遇到一个常量标识符(例如,月份)时,它会将文字值直接替换为它生成的中间语言(IL)代码。
因此,您可以在此处使用const
代替static readonly
:
private static readonly string ERROR_MESSAGE = MyResource.ResourceManager.GetString("resx_key");