2016-04-15 6 views
1

クラス静的コンストラクタでジェネリックリストを入力しようとするこのコードを実行すると、9行目にSystem.TypeInitializationException例外が発生します。c#TypeInitializationException静的コンストラクタ内のジェネリックコレクションを初期化するとき

using System; 
using System.Collections.Generic; 

namespace ConsoleApplication5_static_constructor { 
    public static class DataRepository { 
     public static List<DefinedField> Tables; 
     static DataRepository() { 
      Console.WriteLine("static DataRepository constructor fired"); 
      Tables.Add(new DefinedField("ID")); **//this is line 9** 
     } 
    } 

    public class DefinedField { 
     string _tableName; 
     public DefinedField(string tableName) { 
     _tableName = tableName; 
    } 

     public string TableName { 
      get { return _tableName; } 
      set { _tableName = value; } 
     } 

    } 
} 

コールコード:、してください

using System.Collections.Generic; 

namespace ConsoleApplication5_static_constructor { 
    class Program { 
     static void Main(string[] args) { 
      List<DefinedField> x = DataRepository.Tables; 
     } 
    } 
} 

は何が正確にエラーを引き起こしていると私はそれをどのように解決するのですか?

編集:また、NullReferenceException型の内部例外があります 静的コンストラクタで新しいオブジェクトを初期化できませんか?

+0

一般的に、例外が発生すると、InnerExceptionを調べることは理解できません。これは原因を教えてくれるNullReferenceExceptionでした。 – CathalMF

+0

ありがとう、私は次回このことを念頭に置いておきます。皆さんが私をとても素早く助けてくれてうれしいです。実際には、これを理解するのにはしばらく時間がかかりました。なぜなら、Pythonスクリプトを書くのにもっと慣れているからでしょうか? – kitty

+0

@CathalMF一般的にはyesですが、静的なコンストラクタで例外が発生した場合はそうではありません。 – Maarten

答えて

4

静的プロパティTablesは初期化されていません。静的コンストラクターで例外が発生しているため、TypeInitializationExceptionとして表示されています。したがって、タイプDataRepositoryが初期化されているときに例外が発生します。

解決策は、空のリストに設定することです。

public static List<DefinedField> Tables = new List<DefinedField>(); 
+0

おっとありがとうございます! - この答えを受け入れるには数分待たなければなりません:) – kitty

関連する問題