Что может быть причиной того, что я получаю TypeInitializationException, когда я вызываю статический метод для класса? - PullRequest
4 голосов
/ 09 февраля 2012

У меня есть статический метод в публичном классе.Пример:

public class MyClass {
 public static bool Test() { return true; }
}

И я вызываю это из модульного теста в другом классе:

MyClass.Test();

Когда приходит отладчик, он выдает: TypeInitializationException:

{"Инициализатор типа для« Xxxxx.Yyyyy.MyClass »вызвал исключение.»}

Внутреннее исключение говорит:

{«Значение не может быть нулевым.\ r \ nИмя параметра: контейнер "}

Есть идеи, почему это так?

Примечание. Это класс в консольном приложении, если он важен.

Ответы [ 4 ]

8 голосов
/ 09 февраля 2012

A TypeInitializationException генерируется, когда возникает исключение во время инициализации типа (в отличие от экземпляра типа).

Обычно это означает, что это вызвано исключением в статическом конструкторе или инициализацией статических полей.

Одна важная вещь, которую следует иметь в виду при попытке найти причину, заключается в следующем: как только тип выдает это исключение один раз, он всегда выдает его каждый раз, когда вы пытаетесь получить доступ к типу. Это означает, что для того, чтобы добраться до сути дела, вам, возможно, придется охотиться там, где он был впервые брошен, а не туда, где он был брошен впоследствии.

[Изменить: в ответ на ваш обновленный вопрос] Можете ли вы опубликовать более полный MyClass? Он делает что-то, когда сам тип инициализируется, заставляя его выбросить это.

2 голосов
/ 09 февраля 2012

Может быть, это вам поможет: аналогичный вопрос

Обычно TypeInitializationException скрывает реальное исключение, которое можно просмотреть с помощью InnerException. Если это не поможет, подумайте о создании синглтона , в котором вы сможете лучше контролировать исключение.

0 голосов
/ 01 декабря 2015

Мне потребовалось некоторое время, чтобы найти и мою проблему с этим. Я понял, что использую словарь в моем статическом методе, который содержит два идентичных определения, что приводит к ошибке. Однако это внутреннее исключение было закрыто исключением TypeInitializationException. Я бы попробовал посмотреть на метод, чтобы увидеть, есть ли какие-либо ошибки в вашем коде. Спасибо,

private static Dictionary<string, string> _dictionaryTest = new Dictionary<string, string>() {
    {"zzz", "zzzz"},
    {"zzz", "zzzz"},

}

0 голосов
/ 09 февраля 2012

В прошлом я получал их от хитрых сборок, попробуйте очистить свое решение и восстановить.Также проверьте менеджер конфигурации, чтобы убедиться, что ваша конфигурация сборки верна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...