我正在开发一个用户可以从商店购买商品的系统。每个用户都列在数据库中,当他们购买该项目时,它应该将其添加到数据库中ownedItems
列表中,但是当执行代码行以添加它返回的项目时
System.NullReferenceException:对象引用未设置为实例 的对象
userAccount
是指数据库中的用户部分。这是将项添加到列表中的位置,在 !buy
命令内,然后返回 null:
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);
}
我建议你将列表格式化如下:
List<string> ownedItems1 = new List<String>();
ownedItems1.Add("What you want in your list");