gpt4 book ai didi

C# 如何将类型化对象的 ArrayList 转换为类型化列表?

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:58 24 4
gpt4 key购买 nike

我有一个特定类型对象的 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();

所以基本上我将类型名称作为一个字符串,我可以从该名称创建一个类型,并创建一个包含多个类型对象的集合,但我如何将其转换为列表?我正在为一个属性添加水分,当我执行 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 });

关于C# 如何将类型化对象的 ArrayList 转换为类型化列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com