Вы инициализируете MakeModelSpec
"с помощью инициализатора коллекции".
Коллекции, такие как List<Item>
, можно инициализировать как таковые
new List<Item>
{
Item1,
Item2
}
Ваш код интерпретируется как попыткадля этого, поскольку он не предоставляет параметры, необходимые для инициализации объекта
new MakeModelSpec
{
Make = make.MakeId,
Name = spec.Name
}
Обратите внимание, что вы можете выполнить инициализацию объекта без указания имен параметровесли вы используете анонимные типы.
new
{
make.MakeId,
spec.Name
}
Единственная причина, по которой вышеприведенное не интерпретируется как инициализатор коллекции, заключается в том, что тип является анонимным, поэтому вы создаете имена свойств по ходу работы.Следовательно, имена свойств, которые вы использовали для создания объекта, могут быть выведены .
Следовательно, в следующем примере Name =
является избыточным, поскольку это свойство будет называться Name
в любом случае, но Id =
является , а не избыточным, поскольку это приводит к тому, что анонимный тип имеет свойство с именем Id
, а не MakeId
, которое будет выведено, если вы не указали имя:
new
{
Id = make.MakeId,
Name = spec.Name
}
Если бы MakeModelSpec
должен был реализовать IEnumerable
, так что это было бы на самом деле набором чего-то, то вы могли бы сделать
new MakeModelSpec
{
MakeModelSpec1,
MakeModelSpec2
}
... при условии, что MakeModelSpec1
и -2
относятся к типу, который MakeModelSpec#Add
принимает.Это то, что компилятор думает, что вы пытаетесь сделать.