Как решить такой трабл явно не приводя массив к нужному типу ?
Эмм, а как должно это работать? У тебя массив обжектов, а ты ждёшь массив из Class-ов.
Тебе нужна функция которая будет преобразовывать каждый элемент по отдельности, ибо в этом массиве не обязательно будет лежать Class.
Может проще сразу массив нужного типа создать?
Вообще вариантов несколько:
1. Через Select и некую функцию, которая преобразует объект в твой тип.
var classes = objects.Select(ConvertObjectToClass).ToArray();
2. Через метод Cast - тогда просто произойдёт даункаст каждого элемента.
var classes = objects.Cast<Class>().ToArray();
3. Через Unsafe, но только если ты заранее знаешь, что внутри этого массива только Class-ы, а не какие-то другие типы, которые с ним не совместимы. Иначе получишь мусор вместо данных. Со структурами, конечно, работать не будет.
var classes = System.Runtime.CompilerServices.Unsafe.As<Class[]>(objects);
Вот что кстати будет
using System.Runtime.CompilerServices;
var objects = new object[] { new A { x = 1 }, new B { y = 2, z = 3 } };
var something = Unsafe.As<A[]>(objects);
Console.WriteLine(something[0].x); // 1
Console.WriteLine(something[1].x); // 2
var something2 = Unsafe.As<B[]>(objects);
Console.WriteLine($"{something2[0].y} {something2[0].z}"); // 1 0
Console.WriteLine($"{something2[1].y} {something2[1].z}"); // 2 3
class A
{
public int x;
}
class B
{
public int y;
public int z;
}
А вот если добавить ещё поле - всё совсем поломается.