列表+结构:对象引用未设置为对象的实例

时间:2011-06-06 12:36:30

标签: c# list struct

我使用此代码收到此错误:

struct Msg
{
    public int remove;
    public string text;
}

public class Messages
{
    #region Class Variables
    protected SpriteBatch sb;
    List<Msg> msgList;
    #endregion

    public Messages(SpriteBatch spriteBatch)
    {
        sb = spriteBatch;
        List<Msg> msgList = new List<Msg>();
    }

    public int Now()
    {
        return DateTime.Now.Second;
    }

    public void Add(string text, int keep = 5)
    {
        Msg temp = new Msg();
        temp.remove = Now() + keep;
        temp.text = text;
        msgList.Add(temp);
    }

    public void Draw()
    {
        int count = 0;
        foreach (Msg msg in msgList)
        {
            if (msg.remove >= Now())
            {
                msgList.Remove(msg);
            }
            else
            {
                count++;
                sb.DrawString(Game1.SmallFont1, msg.text, new Vector2(10, 5 + count * 25), Color.White);
            }
        }
    }
}

以及何时执行此操作

        msgList.Add(temp);

它给了我:

    NullReferenceException was unhandled
    Object reference not set to an instance of an object.

2 个答案:

答案 0 :(得分:5)

字段msgList未初始化。在构造函数中,您声明并初始化了一个类型为List<Msg>的新局部变量。

public Messages(SpriteBatch spriteBatch)
{
    sb = spriteBatch;
    msgList = new List<Msg>(); // correct way
}

答案 1 :(得分:3)

不要在构造函数中执行此操作:

List<Msg> msgList = new List<Msg>();

您正在使用同名方法成员隐藏msgList字段(即,您在构造函数中重新声明名称)。实际上,您永远不会初始化该字段。

应该是:

msgList = new List<Msg>();