Объявите константную строку из ресурса - PullRequest
0 голосов
/ 29 июня 2018

Когда я объявляю const из resx, у меня возникает ошибка компиляции.

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

Я понимаю, почему возникает это сообщение компиляции, но есть ли хитрость для объявления const из ресурса?

1 Ответ

0 голосов
/ 29 июня 2018

Это потому, что 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");
...