C#Object Reference未设置为对象错误的实例

时间:2013-07-09 19:58:38

标签: c# nullreferenceexception

Add方法中运行此代码时,我在标题中收到错误。 Add方法应将游戏对象添加到名为queue的列表中 GameObject是一个班级 GameManager也是一个班级 queue是一个列表。

我认为这是唯一相关的代码。

    static void Main()
    {
        GameObject obj1 = new GameObject();
        GameManager manager1 = new GameManager();
        obj1.name = "First";
        manager1.Add(obj1);
        manager1.Process();
    }

    public void Add(GameObject gameObject)
    {
        gameObject.initialize = true;
        queue.Add(gameObject);
    }

3 个答案:

答案 0 :(得分:3)

尝试初始化字段“queue”

  • 它可能从未初始化,因此Object Reference not set to an instance of an object error错误,Add方法的结构可能与queue对应。

  • 此外 - 我会考虑将队列重命名为有意义的名称,因为它目前是欺骗性的。

这是一个初始化建议,它适用于您在问题中描述的List,但可以轻松修改以对应任何IEnumerable,也可以在之前执行的不同方法中完成Main(再次,根据您的代码看起来似乎不太可能):

private List<GameObject> queue; // assuming it's private, doesn't really matter either way.

static void Main()
{
    queue = new List<GameObject>(); // the missing line
    GameObject obj1 = new GameObject();
    GameManager manager1 = new GameManager();
    obj1.name = "First";
    manager1.Add(obj1);
    manager1.Process();
}


public void Add(GameObject gameObject)
{
    gameObject.initialize = true;
    queue.Add(gameObject);
}

答案 1 :(得分:1)

您必须先初始化队列列表

答案 2 :(得分:0)

您需要调试代码。

我假设您使用的是Visual Studio,如果是,请执行以下操作:

  1. 转到“调试”菜单。

  2. 点击例外...选项。

  3. 应出现以下对话框:

    enter image description here

    注意:选中Common Language Runtime Exceptions复选框。

    单击“确定”后,现在当您的代码或.NET Framework抛出异常时调试代码时,调试器将在引发异常的行上停止。这样可以更容易地找到“破坏”的地方。