Нет лучшего типа для неявно типизированного массива

Может кто-нибудь объяснить мне, почему этот код:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
};

Дает мне ошибку:

Не найден лучший тип для неявно типизированного массива

в то время как этот работает отлично:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { A = "" },
};

Помимо другого свойства (B в последней записи первого примера), они одинаковы. Но первый не компилируется. Почему?

Ответ 1

Это потому, что в первом примере у вас есть два разных анонимных типа, определение последнего элемента отличается от других.

В первом примере один, содержащий свойство A и один, содержащий свойство B, и компилятор не может определить тип массива. Во втором примере есть один анонимный тип, содержащий только A.

Я думаю, что это typo, поэтому вы можете изменить B на A в последней записи в первом примере

От MSDN:

Вы можете создать неявно типизированный массив, в котором тип Экземпляр массива выводится из элементов, заданных в массиве инициализатор.

Ответ 2

Вы можете использовать:

var marketValueData = new object[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
    ...,
};

Ответ 3

Анонимные типы должны быть одинаковыми. Просто измените B на A.

Ответ 4

У меня была похожая проблема в строке кода, как это

sqwOraContext.save(new [] {студент, курс});

студент и курс наследуют оба из SQWEntity, но компилятор по какой-то причине не проверяет базовый тип. Только установка типа массива в SQWEntity устранила ошибку.

sqwOraContext.save(new SQWEntity [] {студент, курс});

Конечно, нет необходимости указывать тип в такой строке, где student1, student2 имеют одинаковый тип.

sqwOraContext.save(new [] {student1, student2});