C#当PropertyInfo的类型为List<;T>;并且我有一个列表<;对象>;

本文关键字:gt lt 有一个 对象 列表 List PropertyInfo 类型 | 更新日期: 2023-09-27 18:21:13

我有一个具有泛型List属性的对象,其中T是基元值、字符串或枚举。此列表的泛型参数永远不会是引用类型(字符串除外)。现在,我有另一个List,它的参数类型是object。有没有办法用我的对象列表设置该属性的值?如:

List<object> myObjectList = new List<object>();
myObjectList.Add(5);
property.SetValue(myObject, myObjectList, null);

当我知道房产的真实类型是:

List<int>

我能看到的唯一解决方案是制作一个硬编码开关,该开关使用list属性的泛型参数类型并创建一个类型安全列表。但最好是有一个通用的解决方案。谢谢

C#当PropertyInfo的类型为List<;T>;并且我有一个列表<;对象>;

如果您知道它确实是某些TList<T>(例如,而不是接口),则应该创建属性的真实类型的实例。然后,您可以强制转换为IList并将值添加到其中,而无需知道实际类型。

object instance = Activator.CreateInstance(property.PropertyType);
// List<T> implements the non-generic IList interface
IList list = (IList) instance;
list.Add(...); // Whatever you need to add
property.SetValue(myObject, list, null);

是的,你可以这样做:

property.SetValue(myObject, myObjectList.Cast<int>().ToList(), null);

这是在使用Enumerable.Cast,所以请注意,如果列表中有非int类型的值,这将引发运行时异常。