Почему инициализация статического поля вызывает страшное время выполнения "Неоднозначное совпадение найдено"? - PullRequest
0 голосов
/ 06 января 2011

Следующая декларация приводит к ошибке:

private static IDictionary<int, string> Dic = new Dictionary<int, string>();

Пока нет:

private static IDictionary<int, string> Dic;

Что за ...?Я знаю, что могу инициализировать словарь в статическом конструкторе, но я действительно хочу использовать буквальный инициализатор (та же проблема).

Редактировать : Похоже, проблема связана сстатический конструкторЕсли я объявляю статический конструктор, я получаю ту же ошибку.Без сомнения, инициализируя поле, компилятор генерирует статический конструктор по умолчанию.Части нашего приложения используют отражение, чтобы выбрать класс для создания экземпляра - я думаю, что он может быть запутан статическим методом конструктора.

Фактически, я могу добавить любое статическое поле (static int i = 0;) с инициализатороми получить те же результаты.Это на самом деле связано с архитектурой всего нашего приложения.Я иду другим путем с этим.Спасибо за все Ваши ответы.

Ответы [ 2 ]

1 голос
/ 06 января 2011

Если это неоднозначная ссылка, то это потому, что в ваших using пространствах имен есть несколько типов с таким именем, поэтому компилятор не знает, на какой из них вы ссылаетесь.Вы можете сделать это явно так:

private static IDictionary<int, string> Dic = 
    new System.Collections.Generic.Dictionary<int, string>();
0 голосов
/ 29 июля 2011

Мы использовали Activator.CreateInstance для создания экземпляров наших презентационных классов.Флажки привязки включали флаг, который включал поиск статических конструкторов.Снятие этого флага устранило ошибку.Как я уже сказал в этом вопросе, кажется, что инициализация статического поля приведет к тому, что компилятор сгенерирует статический конструктор.

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