类数组用法生成错误“NullReferenceException:对象引用未设置为对象的实例”

时间:2015-05-20 14:44:40

标签: c# arrays class compiler-errors

我目前正在为一款名为Reign of Kings的游戏开发服务器系统。我正在使用Oxide开发人员提供的钩子和命令来制作我的服务器系统。回到PAWN语言,我们可以做类似于数组内部的播放器数据枚举,将其转换为2d数组 - 这很酷。像PlayerData [playerid] [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()的方式。

1 个答案:

答案 0 :(得分:1)

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

尝试这样的事情:

pData[] PlayerData = new pData[MAX_PLAYERS];

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

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

相关问题