Я пытаюсь преобразовать массив (объект []) в общий c тип T, где T - это список <>
. Проблема в том, что T - это тип списка и не тип элементов в списке. Поэтому мы не можем просто создать список.
Хотя я мог бы сериализовать массив и десериализовать его в обобщенный c T, я не хочу использовать эту опцию и предпочел бы более быстрый подход к проблема.
Ниже приведен код для тестирования и воспроизведения проблемы.
public T ConvertList<T>(object obj)
{
if (obj is object[] objects)
{
var type = objects.GetType().GetElementType();
var list = objects.Select(o => Convert.ChangeType(o, type)).ToList();
// Unable to cast object of type 'System.Collections.Generic.List`1[System.Object]' to type 'System.Collections.Generic.List`1[System.String]'.'
return (T)(object)list;
}
return default;
}
var list = ConvertList<List<string>>( new []{ "1", "a", "b" });
Assert.AreEqual(typeof(List<string>), list.GetType());
Проблема в том, что мы не можем сделать что-то вроде:
var list = new List<typeof(type)>()
I ' Я открыт для предложений о том, как мы можем достичь чего-то подобного.
Спасибо.