public Array ListToArray(List<Object> list)
{
//for example i need convert list to string[] (not knowing that objects is strings)
}
我有一个对象列表。 所有相同类型的对象。 但对我来说,这种类型尚不清楚。 类型可以是例如String或任何其他类。 我需要将此List转换为继承类的数组。 我该怎么办?
答案 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