C#NullReference即使对象设置为实例也是例外

时间:2015-03-20 14:37:26

标签: c# instance nullreferenceexception

我遇到了一个非常奇怪的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对象为空。

1 个答案:

答案 0 :(得分:0)

问题很可能是您的Player为null,当您尝试访问Difficulty属性时导致空引用异常,而不是game为空。