我使用此代码收到此错误:
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.
答案 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>();