从资源声明一个常量字符串

时间:2018-06-29 06:17:46

标签: c# resources const resx

当我从resx声明const时,出现编译错误。

private const string ERROR_MESSAGE = MyResource.ResourceManager.GetString("resx_key");

我理解为什么会出现此编译消息,但是有一个技巧可以从资源中声明const吗?

1 个答案:

答案 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");