Lists+Structs:对象引用未设置为对象的实例

本文关键字:对象 实例 设置 对象引用 Lists+Structs | 更新日期: 2023-09-27 17:58:32

我用以下代码得到了这个错误:

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.

Lists+Structs:对象引用未设置为对象的实例

字段msgList未初始化。在构造函数中,您声明并初始化了一个类型为List<Msg>的新局部变量。
public Messages(SpriteBatch spriteBatch)
{
    sb = spriteBatch;
    msgList = new List<Msg>(); // correct way
}

不要在构造函数中这样做:

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

您使用相同名称的方法成员隐藏了msgList字段(也就是说,您在构造函数中重新声明名称)。实际上,您永远不会初始化字段。

应该是:

msgList = new List<Msg>();