我有一个特定类型的对象ArrayList,我需要将这个ArrayList转换为一个类型列表。这是我的代码
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,并创建一个包含多个对象类型的集合,但是如何将其转换为List?我正在为一个属性保湿,当我做一个SetValue时,我的属性类型需要匹配。
非常感谢。
答案 0 :(得分:5)
如果您使用的是.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 });
答案 1 :(得分:1)
使用扩展方法:.ToList<myType>()
答案 2 :(得分:1)
创建
List<YourType> list = new List<YourType>;
然后
list.AddRange(yourArray);
答案 3 :(得分:0)
改为使用通用List<>
类型。
答案 4 :(得分:0)
它必须是List<T>
还是IEnumerable<T>
呢?
从Linq那里拿一点你可以做到:
object returnValue = myArrayList.Cast<string>();
创建以下对象(假设T = string):
System.Linq.Enumerable+<CastIterator>d__b1`1[System.String]