我遇到了一个非常奇怪的NullReferenceException
。我使用new
关键字将对象设置为实例,但仍会抛出异常。这是我的代码:
游戏类
public class Game
{
public Game(Player playerParam)
{
Player = playerParam;
}
public Player Player;
public int Duration = 60;
}
public class Player
{
public Difficulty Difficulty;
public string Name;
public int Bonus;
}
现在我首先创建Player实例然后在游戏开始时我在玩家中创建游戏传递。这按预期工作。但是我有另一个用于Setting的类,其构造函数接受Game对象并访问Player以更改某些设置。我是这样做的:
public class Settings
{
private Game game;
public Settings(Game gameParam)
{
game = gameParam;
}
private void changeDifficulty(Difficulty difficulty)
{
game.Player.Difficulty = difficulty;
}
}
该行
game.Player.Difficulty = difficulty;
抛出NullReferenceException,即使我传入Settings构造函数,一个已经初始化的Game对象。进入代码我发现设置上的游戏对象(游戏)仍为空。这里错了什么
播放器就像这样实例化
Player player = new Player();
在构造函数的正上方。
以下是其他详细信息。 我在游戏之前实例化Player,这是在主游戏Form上完成的。然后我将实例化的值传递给Settings,这实际上是另一个WinForm。我进入代码,当我将它传递给Settings Form构造函数时,发现游戏被实例化。但是在“设置表单”中,访问时Game对象为空。
答案 0 :(得分:0)
问题很可能是您的Player
为null,当您尝试访问Difficulty
属性时导致空引用异常,而不是game
为空。