gpt4 book ai didi

c# - 如何创建列表<编译时未知类型>并通过 System.Reflection.PropertyInfo 复制项目

转载 作者:行者123 更新时间:2023-11-30 13:50:40 25 4
gpt4 key购买 nike

我遇到了一些非常复杂的事情。如果有人可以提供帮助,我将不胜感激。

1) 我必须在编译时创建一个未知类型的列表<>。我已经实现了。

 Type customList = typeof(List<>).MakeGenericType(tempType);
object objectList = (List<object>)Activator.CreateInstance(customList);

“temptype”是已经获取的自定义类型。

2) 现在我有了 PropertyInfo 对象,它是我必须从中复制所有项目到我刚刚创建的实例“objectList”的列表

3) 然后我需要迭代和访问“objectList”的项目,就好像它是“System.Generic.List”一样。

长话短说,使用反射我需要提取一个列表属性并将其作为实例以供进一步使用。您的建议将不胜感激。提前致谢。

乌梅尔

最佳答案

许多 .NET 泛型集合类也实现了它们的非泛型接口(interface)。我会利用这些来编写您的代码。

// Create a List<> of unknown type at compile time.
Type customList = typeof(List<>).MakeGenericType(tempType);
IList objectList = (IList)Activator.CreateInstance(customList);

// Copy items from a PropertyInfo list to the object just created
object o = objectThatContainsListToCopyFrom;
PropertyInfo p = o.GetType().GetProperty("PropertyName");
IEnumerable copyFrom = p.GetValue(o, null);
foreach(object item in copyFrom) objectList.Add(item); // Will throw exceptions if the types don't match.

// Iterate and access the items of "objectList"
// (objectList declared above as non-generic IEnumerable)
foreach(object item in objectList) { Debug.WriteLine(item.ToString()); }

关于c# - 如何创建列表<编译时未知类型>并通过 System.Reflection.PropertyInfo 复制项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795815/

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