C# 当 PropertyInfo 值的类型是列表<T>并且我有一个列表<object>时,如何设置 PropertyInfo 值



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

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

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

List<int>

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

如果您知道它确实是某些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类型的值,这将引发运行时异常。

相关内容

  • 没有找到相关文章

最新更新