C#将数组转换为通用T列表<>

我正在尝试将数组(object [])转换为通用类型T,其中T是List <>

这里的问题是T是列表的类型,而不是列表中项目的类型。因此,我们不能只创建一个列表。

虽然我可以序列化数组并将其反序列化为通用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)>()

我愿意就如何实现这样的目标提出建议。

谢谢。

评论