-1

我正在使用以下代码:

private Dictionary<string, user> totalUsers = new Dictionary<string, user>();

“用户”类的相关部分

private Dictionary<DateTime,string> killerField;

public Dictionary<DateTime,string> killedPlayers
{
    get
    {
        return this.killerField;
    }
    set
    {
        this.killerField = value;
    }
}

我如何尝试执行此操作

totalUsers[playerName].killedPlayers.Add(DateTime.Now, dyingPlayer);

但我收到一个错误:

"Object reference not set to an instance of an object"

为什么它不起作用?

提前致谢。

4

4 回答 4

3

您必须先创建一个实例,killerField然后才能做Add任何事情。在添加播放器时,尚未使用new Dictionary<DateTime,string>().

您可以将其作为声明的一部分或在类构造函数中执行。

于 2013-06-22T17:37:39.927 回答
1

你很可能没有初始化字典killerFields,因此你不能添加它。

于 2013-06-22T17:27:48.733 回答
0

如果您提供的代码是正确的,我 100% 确定以下解决方案将起作用。

if(!totalUsers.ContainsKey(playerName))
{
    totalUsers.Add(playerName, new User());
    //or
    //totalUsers[playerName] = new User();  
}

//and then you can do actions on the initialized value in the dictionary

totalUsers[playerName].killedPlayers.Add(DateTime.Now, dyingPlayer);

您还应该在类中实例化字典,也许在构造函数中

private Dictionary<DateTime,string> killerField = new Dictionary<DateTime,string>();
于 2013-06-22T17:46:12.360 回答
0

因为 totalUsers[User] 不在您的字典中。此外,您将 totalUsers 定义为具有返回 User 对象的 String 键。然后使用 User 键引用它。您需要填写 TotalUsers,然后通过一些字符串令牌获取用户。

像这样:

string userName = "yourusertoken";
totalUsers[userName].killedPlayers.Add(someDate,somestring);
于 2013-06-22T17:27:46.380 回答