2016-05-04 9 views
-1

私はIList<int> throws Null Reference Exception when adding valuesと同じ問題を抱えており、解決策はコンストラクタのリストフィールドを "new List();"で初期化しますが、私のプログラムではクラスはありません。 C#の構造体にパラメータがない場合、C#で何ができますか?構造体のリストフィールドを初期化する

public struct ListStruct<T> : IEnumerable<T>, IList<T> 
{ 
    private List<T> value; 

    //public ListStruct() 
    //{ 
    // this.value = new List<T>(); 
    //} 

    // ... 

    public void Add(T item) 
    { 
     ((IList<T>)value).Add(item); // Execution time: NullReferenceException was unhandled 
    } 
} 
+8

'リスト'を 'struct 'の中にラップすることは、私にとっては悪い考えです。なぜあなたはこれをやっている?参考までに、参照はあなたの 'struct'の中の' List 'です。 'プライベートリスト値=新しいリスト();'を初期化する必要があります。 – juharr

+2

なぜコンストラクタをコメントアウトしますか?あなたはすでに問題を解決するコードを持っています。 (実際には、コンストラクタのパラメータを定義する必要があります。このようなことは、上記のコメントに戻って、この構造体が実際に*なるものであることを理解しようとしています)。 – David

+0

これは医師によってマークされた複製ではありません。デビッド。問題は、構造体にデフォルトのコンストラクタを持てないことです。したがって、コンストラクタにパラメータを指定しないかぎり、参照で格納されているメンバを初期化する方法はありません(https://msdn.microsoft.com/en-us/library/aa288208( v = vs.71).aspx)、またはそれを 'struct'とする考えを放棄してください。 – zmechanic

答えて

0

あなたが本当にこれを必要とする場合は、NULLかどうかについてAdd()方法テストを持つことができ、必要に応じて新しいリストを割り当てます。

これはなぜ必要なのか分かりません。それは意味的に値型ではないので、一般的にはstructでなければならないものではありません。パフォーマンス上の理由からそれを悪用し、そうでない場合よりも複雑なパスをたどることはあまり意味がありません。

関連する問題