2016-04-15 1 views
1

Я получаю исключение System.TypeInitializationException в строке 9 при запуске этого кода, в котором я пытаюсь заполнить общий список в class'static constuctor.C# TypeInitializationException при инициализации общей коллекции в static constuctor

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 Обычно да, но не тогда, когда исключение происходит в статическом конструкторе. – Maarten

ответ

4

Ваше статическое свойство Tables не инициализировано. Он отображается как исключение TypeInitializationException, поскольку исключение запускается в статическом конструкторе. Таким образом, исключение возникает, когда инициализируется тип DataRepository.

Решение состоит в том, чтобы установить его в пустой список.

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

oops thank you !!! - подождать несколько минут, чтобы принять этот ответ :) – kitty