C# Почему добавление объектов в мой список <> заменяет все остальные элементы? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь прочитать ввод с консоли и создать объекты моего собственного типа данных Word и добавить их в список . Однако каждый раз, когда я добавляю новый, все предыдущие заменяются.

L oop:

while (!QuitInput(wordInput.ToLower()))
{
    ...handle invalid input...
    else
    {
        try
        {
            ReadWordFromConsole(languages[0], languages[1], wordInput);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
    wordInput = Console.ReadLine().Trim(' ', ';');
}

Метод:

private static void ReadWordFromConsole(string language1, string language2, string input)
{
    var splitInput = input.Split(';');
    for (int i = 0; i < splitInput.Length; i++)
        splitInput[i] = splitInput[i].Trim(' ');
    if (splitInput.Length < 2)
    {
        if (!input.Contains(';'))
            throw new ArgumentException("Separate with ';'");
        throw new ArgumentException("Invalid input. 'h' for help.");
    }

    var translationList = new List<string>();
    for (int i = 1; i < splitInput.Length; i++)
        translationList.Add(splitInput[i]);


    var word = new Word(language1, language2, splitInput[0], translationList);
    _loadedWords.Add(word);
}

Слово класс:

private static string _language;

public Word(string language, string translationLanguage, string text, List<string> translations)
{
    Language = language;
    TranslationLanguage = translationLanguage;
    Text = text;
    Translations = translations;
}

public string Language
{
    get
    {
        return _language;
    }
    set
    {
        if (string.IsNullOrEmpty(value))
            throw new ArgumentException("Language cannot be empty");
        _language = value;
    }
}
...

Глобальный список, объявленный в том же классе, что и ReadWordFromConsole:

private static List<Word> _loadedWords = new List<Word>();

При исследовании я обнаружил, что в некоторых сообщениях нельзя использовать один и тот же экземпляр объекта в oop. Но разве я не создаю новый каждый раз, когда вызывается ReadWordFromConsole?
Что я должен изменить, чтобы он работал и не заменял предыдущие слова?

1 Ответ

2 голосов
/ 10 апреля 2020

С полем stati c в качестве резервного хранилища свойства

private static string _language;

, даже если это свойство экземпляра, у вас фактически есть только одно место, где все ваши экземпляры Word хранят / получают их Язык.

Решение: просто удалите это static.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...