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 - 使用する前にリストをチェックして、null でないことを確認し、null である場合は新しいリストを割り当てます。繰り返しますが、スレッドセーフにするための措置を講じない限り (たとえば、クリティカル セクションに入るなど) 、これはスレッドセーフではありません。

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 に答える