Нестатическая переменная при создании массива

хочу сделать мультиязычность для некоторых переменных. В другом классе инициализирую для каждого пользователя класс MyVariables передавая в параметре значение выбираемого им языка.

  public class MyVariables {
        private const string RU_LANG = "RU";
        private const string EN_LANG = "EN";

        private string language = RU_LANG;

        public MyVariables (string lang) {
            language = lang;
        }

        public string one_message {
            get {
                switch (language) {
                    case EN_LANG:
                        return "Message";
                    case RU_LANG:
                    default:
                        return "Сообщение";
                }
            }
        }

        public string[] messages = new string[] { one_message };
    }

Проблема в том, что при создании массива сообщений возникает ошибка A field initializer cannot reference the non-static field, method, or property на переменную one_message. Массив нужно сделать именно в классе MyVariables.


Ответы (1 шт):

Автор решения: aepot

Перенесите инициазацию в конструктор.

public string[] messages;

public MyVariables (string lang)
{
    language = lang;
    messages = new string[] { one_message };
}

Но я так и не понял, зачем вам массив.

Если по-простому, на 2 языка, то бы сделал как-то так. Немного костыльно, на зато просто.

public enum Language
{
    EN, RU
}

public static class Localization
{
    private static readonly Dictionary<Language, string[]> _data = new()
    {
        [Language.RU] = new string[]
        {
            "Имя",
            "Сообщение"
        },
        [Language.EN] = new string[]
        {
            "Name",
            "Message"
        }
    };

    public static Language Language = Language.EN;

    public static string Name => _data[Language][0];
    public static string Message => _data[Language][1];
}
Localization.Language = Language.RU;
string message = Localization.Message;
→ Ссылка