2011-06-06 71 views
2

我得到這個錯誤與此代碼:清單+的Structs:對象引用不設置到對象的實例

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. 

回答

4

領域msgList;未初始化。在構造函數中聲明並初始化了一個新的局部變量,類型爲List<Msg>

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

是的,我只是很愚蠢:(謝謝! – Lrdude 2011-06-06 12:48:24

3

不要在你的構造做這樣的:

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

您正在隱藏msgList字段中的同名方法成員(即,您在構造函數中重新聲明名稱)。實際上,您從不初始化該字段。

它應該是:

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

啊,你說得對!非常感謝你。 – Lrdude 2011-06-06 12:47:06

相關問題