2013-02-15 24 views
0

我送從一個asp.net網站的幾個單獨的郵件到我的WCF服務器使用全球通用的列表。定義和WCF應用

這些消息通過單獨來了,我需要的服務器來接他們,和「十字繡」在一起。

我所試圖做的就是把這些方法在全球列表,然後使用不同類名單做我的競標。

到目前爲止,我有...

variables.cs

class variables 
{ 
    public static List<string> MessageStitches { get; set; } 
} 

Program.cs

if (!string.IsNullOrEmpty(node)) 
{ 
    variables.MessageStitches.Add(node); 
} 

但我收到此錯誤:

Object reference not set to an instance of an object.

任何人都可以看到我要去哪裏錯了,以及如何解決它?

+0

請注意,C#中的類應該按照慣例以大寫字母開頭。 – 2013-02-15 09:18:50

+0

我知道。我在創作過程中很冷靜,忽略了這一點。 – TheGeekZn 2013-02-15 09:23:59

回答

1

您沒有設置variables.MessageStitches屬性爲一個新的列表。

您有幾種選擇,但你最好的選擇是幾乎可以肯定1或2

1 - 中variables構造函數分配一個新的列表。然而,因爲你的列表是靜態的,所以這實際上不會對你有幫助,因爲你可能沒有實例化你的類,所以你的構造函數將不會運行。您可以擁有static constructor

class variables 
{ 
    public static List<string> MessageStitches { get; set; } 

    // Static constructor 
    static variables() 
    { 
     MessageStitches = new List<string>(); 
    } 
} 

2 - 不要使用自動屬性。相反,有backing field你的財產,這是在初始化分配一個值:

public class variables 
{ 
    private static List<string> messageStitches = new List<string>(); 
    public static List<string> MessageStitches 
    { 
     get 
     { 
      return messageStitches; 
     } 
     set 
     { 
      messageStitches = value; 
     } 
    } 

3 - 使用,以確保它不是空前檢查列表,如果是,分配一個新的列表即可。同樣,這不會是線程安全的,除非你採取措施使不是這樣(例如,通過輸入critical section

if (!string.IsNullOrEmpty(node)) 
{ 
    if (variables.MessageStitches == null) 
    { 
     variables.MessageStitches = new List<string>(); 
    } 
    variables.MessageStitches.Add(node); 
} 
+0

謝謝,你的文章很重要,而且非常具有說服力。 +1 – TheGeekZn 2013-02-15 09:23:07

0

定義構造函數Variable.cs,如:

public variables() 
{ 
    MessageStitches = new List<string>(); 
} 

,或者你可以做像這樣:

variables.MessageStitches = new List<string>(); 
variables.MessageStitches.Add(node);