Это не один вкладыш, но это можно сделать двумя строками. Учитывая заданные вами Array
элементы правильного типа myArray
и указанный Type
параметр myType
, динамический вызов .Cast<"myType">.ToArray()
будет работать.
var typeConvertedEnumerable = typeof(System.Linq.Enumerable)
.GetMethod("Cast", BindingFlags.Static | BindingFlags.Public)
.MakeGenericMethod(new Type[] { myType })
.Invoke(null, new object[] { myArray });
var typeConvertedArray = typeof(System.Linq.Enumerable)
.GetMethod("ToArray", BindingFlags.Static | BindingFlags.Public)
.MakeGenericMethod(new Type[] { myType })
.Invoke(null, new object[] { typeConvertedEnumerable });
Хотя генерация метода медленнее, чем прямой вызов, она равна O (1) от размера массива. Преимущество этого подхода состоит в том, что если IEnumerable<"myType">
будет приемлемым, вторая строка не нужна, и поэтому я не верю, что массив будет скопирован.