c#如何将类型化对象的数组列表转换为类型化列表

本文关键字:列表 类型化 数组 转换 对象 | 更新日期: 2023-09-27 18:06:09

我有一个特定类型对象的数组列表,我需要将这个数组列表转换为类型列表。这是我的代码

Type objType = Type.GetType(myTypeName);
ArrayList myArrayList = new ArrayList();
object myObj0 = Activator.CreateInstance(type);
object myObj1 = Activator.CreateInstance(type);
object myObj2 = Activator.CreateInstance(type);
myArrayList.Add(myObj0);
myArrayList.Add(myObj1);
myArrayList.Add(myObj2);
Array typedArray = myArrayList.ToArray(objType);  // this is typed
object returnValue = typedArray.ToList();  // this is fake, but this is what I am looking for

没有ToList()可用于数组,这是我正在寻找的行为

object returnValue = typedArray.ToList();

基本上我有一个字符串类型名,我可以从名称创建一个type,并创建一个包含几个类型对象的集合,但我如何将其转换为列表?当我执行SetValue时,我的属性类型需要匹配。

c#如何将类型化对象的数组列表转换为类型化列表

如果你正在使用。net 4,动态类型可以提供帮助——它可以执行类型推断,这样你就可以调用ToList,当然不是作为扩展方法:

dynamic typedArray = myArrayList.ToArray(objType);    
object returnValue = Enumerable.ToList(typedArray);

否则,你需要使用反射:

object typedArray = myArrayList.ToArray(objType);   
// It really helps that we don't need to work through overloads...
MethodInfo openMethod = typeof(Enumerable).GetMethod("ToList");
MethodInfo genericMethod = openMethod.MakeGenericMethod(objType);
object result = genericMethod.Invoke(null, new object[] { typedArray });

创建

List<YourType> list = new List<YourType>;

然后

list.AddRange(yourArray); 

使用扩展方法:.ToList<myType>()

请使用通用的List<>类型。

必须是List<T>还是IEnumerable<T> ?

从Linq学习一点你可以做:

object returnValue = myArrayList.Cast<string>();

创建以下对象(假设T = string):

System.Linq.Enumerable+<CastIterator>d__b1`1[System.String]