Добавление в список возвращает ноль - PullRequest
0 голосов
/ 08 апреля 2019

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

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта

userAccount относится к разделу пользователей в базе данных. Здесь элемент добавляется в список внутри команды !buy, которая затем возвращает ноль:

    var userAccount = UserAccounts.GetAccount(Context.User);                    
    userAccount.ownedItems.Add(":motorbike: motorbike");
    UserAccounts.SaveAccounts();

Здесь список определяется под классом UserAccount

public List<string> ownedItems { get; set; }

Здесь будет создан список, если userAccount не существует для указанного пользователя:

       private static UserAccount CreateUserAccount(ulong id)
    {
        var newAccount = new UserAccount()
        {
            ID = id,
            Level = 0,
            XP = 0,
            RequiredXP = 150,
            Bank = 50,
            Cash = 50,
            ownedItems = new List<string> { ":iphone: iPhone"  }, //this is where ownedItems is defined
        };

        accounts.Add(newAccount);
        SaveAccounts();
        return newAccount;
    }

Несмотря на то, что при добавлении userAccount он добавляет «: iphone: iPhone», это не так. Он просто устанавливает его на null.

public static void SaveAccounts()
{
    DataStorage.SaveUserAccounts(accounts, accountsFile);
}

public static void SaveUserAccounts(IEnumerable<UserAccount> accounts, string filePath)
{
    string json = JsonConvert.SerializeObject(accounts, Formatting.Indented);
    File.WriteAllText(filePath, json);
}

1 Ответ

0 голосов
/ 08 апреля 2019

Я бы предложил вам отформатировать список следующим образом: List<string> ownedItems1 = new List<String>(); ownedItems1.Add("What you want in your list");

...