如何将List <object>转换为继承类的数组?</object>

时间:2014-01-02 10:18:11

标签: c# arrays types

public Array ListToArray(List<Object> list)
{
   //for example i need convert list to string[] (not knowing that objects is strings)
}

我有一个对象列表。 所有相同类型的对象。 但对我来说,这种类型尚不清楚。 类型可以是例如String或任何其他类。 我需要将此List转换为继承类的数组。 我该怎么办?

4 个答案:

答案 0 :(得分:9)

您可以使用Array.CreateInstance在运行时创建所需类型的数组,然后使用Array.Copy填充它,例如:

public Array ListToArray(List<Object> list)
{
    // assume there is at least one element in list
    Array arr = Array.CreateInstance(list[0].GetType(), list.Count);
    Array.Copy(list.ToArray(), arr, list.Count);
    return arr;
}

现在ListToArray(new List<object>{1,2})将返回int[]ListToArray(new List<object>{"1","2"})将返回string[](显然输入为Array)。

答案 1 :(得分:1)

你可能想要这个

var result = list.Cast<Object>().ToArray();

或对于泛型类型参数,您可以使用

var result = list.Cast<T>().ToArray();

答案 2 :(得分:1)

如果你有一个Type实例(在运行时已知),那么你就无法投射它,实际上没有任何意义。你必须使用反射。

如果您有一个泛型类型参数T,那么您可以像这样投射它:

public class Something<T>
{
    public void ListToArray(List<Object> list)
    {
       var instances = list.Cast<T>().ToArray();
    }
}

或者,如果您想过滤列表的内容并获取实际上属于T类型的实例,请改用:

var instances = list.OfType<T>().ToArray();

答案 3 :(得分:0)

对于你的例子,这应该有效(如果它是一个字符串)

var stringArray = list.Select(x=>x.ToString()).ToArray();

您可以选择以下选项进行其他投射:

var stringArray = list.Select(x=> x as yourType).ToArray();

使用as您将对象转换为您想要的类型,如果无法进行强制转换,它将返回null