Я работаю в системе, где пользователи могут покупать товары в магазине. Каждый пользователь указан в базе данных, и когда он покупает этот элемент, он должен добавить его в список 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);
}