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时,我的属性类型需要匹配。
如果你正在使用。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]