Вы не можете выполнить это приведение, потому что в этом случае массив WebObjectDTO
не является массивом MlaLocationDTO
. Рассмотрим более простой пример, предположим, что у вас есть
class Alpha { }
class Beta : Alpha { }
Alpha[] alphas = new Beta[10]; // supported via array variance
Beta[] betas = (Beta[])alphas; // legal cast, the array is actually of this type
Alpha[] alphas2 = new Alpha[10];
Beta[] betas2 = (Beta[])alphas2; // not legal, the array isn't of this type
Каждый элемент в массиве вполне может быть MlaLocationDTO
, но если сам массив не является массивом этих объектов, вы не сможете выполнить это приведение. Он взорвется во время выполнения, как вы видели в своем коде.
Что касается решений, , если MlaLocationDTO
имеет отношение наследования с WebObjectDTO
, где MlaLocationDTO : WebObjectDTO
и , если каждый объект в массиве фактически a MlaLocationDTO
, вы можете разыграть каждый отдельный элемент.
var locations = searchResult.WebObjectDTOs.Cast<MlaLocationDTO>();
Однако, если местоположения на самом деле не относятся к этому типу объектов, вам просто нужно определить преобразование самостоятельно. Это достаточно просто сделать в форме запроса.
var locations = from location in searchResult.WebObjectDTOs
select new MlaLocationDTO
{
Name = ...,
Id = ...,
/* etc. */
};
При необходимости включите .ToArray()
в любую из форм запроса, если вам нужен результат массива. Тип будет тогда MlaLocationDTO[]
. Без вызова ToArray()
это будет просто IEnumerable<MlaLocationDTO>
.