0

我正在从一个 asp.net 站点向我的 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.

谁能看到我哪里出错了,以及如何解决?

4

2 回答 2

1

您尚未将该variables.MessageStitches属性设置为新列表。

您有多种选择,但对您来说最好的选择几乎肯定是 1 或 2。

1 - 在 的构造函数中分配一个新列表variables。但是,由于您的列表是静态的,这实际上对您没有帮助,因为您可能尚未实例化您的variables类,因此您的构造函数将不会运行。你可以有一个静态构造函数

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

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

2 - 不要使用自动属性。相反,为您的属性设置一个支持字段,在初始化时为其分配一个值:

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

3 - 使用前检查列表以确保它不为空,如果是,则分配一个新列表。同样,这将不是线程安全的,除非您采取措施使其如此(例如,通过进入临界区

if (!string.IsNullOrEmpty(node))
{
    if (variables.MessageStitches == null)
    {
        variables.MessageStitches = new List<string>();
    }
    variables.MessageStitches.Add(node);
}
于 2013-02-15T09:10:04.820 回答
0

在 Variable.cs 中定义一个构造函数,例如:

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

或者你可以这样做:

variables.MessageStitches = new List<string>();
variables.MessageStitches.Add(node);
于 2013-02-15T09:12:41.850 回答