Class 数组使用产生错误 "NullReferenceException: Object reference not set to an instance of an object"

Class Array usage generates the error "NullReferenceException: Object reference not set to an instance of an object"

我目前正在为一款名为 Reign of Kings 的游戏开发服务器系统。我正在使用 Oxide 开发人员提供的挂钩和命令来制作我的服务器系统。回到 PAWN 语言,我们可以做一些事情,比如在数组中枚举玩家数据,将其转换为二维数组——这很酷。像 PlayerData[playerid][data] 和 data 可以是任何东西,从一个叫做 pAdminLevel 的整数到一个叫做 pPassword 的字符串。

我知道在 C# 中,情况有所不同。所以我试着复制这样的方法:

pData[] PlayerData = new pData[MAX_PLAYERS];
public class pData
{
    private int _admin;
    public int admin { get { return _admin; } set { _admin = value; } }
    public void ClearInfo()
    {
        _admin = 0;
    }
}

所以基本上每当我想叫玩家的名字时,我都可以使用 PlayerData[playerid].admin.

但我收到错误消息:

5:13 PM [Error] Failed to call hook 'OnPlayerConnected' on plugin 'ServerCommands' (NullReferenceException: Object reference not set to an instance of an object)

经过大量测试后,我绝对确定问题出在我调用 PlayerData[x].admin 和 PlayerData[x].ClearInfo() 的方式上。

您没有初始化新数组的成员。与 C++ 等语言不同,数组的内容是 引用类型 ,因此您的代码相当于创建指针数组并立即尝试使用数组成员的 C++ .

尝试这样的事情:

pData[] PlayerData = new pData[MAX_PLAYERS];

for(int i=0; i < MAX_PLAYERS; i++)
{
    PlayerData[i] = new pData();
}

这会在数组的每个元素中放置一个新的 pData 对象,然后您的代码应该会按预期工作。