【发布时间】:2014-11-03 14:42:05
【问题描述】:
我有一个具有通用 List 属性的对象,其中 T 是原始值、字符串或枚举。此列表的通用参数永远不会是引用类型(字符串除外)。现在,我有另一个参数类型为对象的列表。有没有办法用我的对象列表设置该属性的值?如:
List<object> myObjectList = new List<object>();
myObjectList.Add(5);
property.SetValue(myObject, myObjectList, null);
当我知道该属性的真实类型是:
List<int>
我能看到的唯一解决方案是制作一个硬编码开关,该开关使用列表属性的泛型参数类型并创建一个类型安全列表。但是最好有一个通用的案例解决方案。谢谢!
【问题讨论】:
-
嗯,5 不是字符串。当 T 是字符串时它应该如何表现?
-
将值添加到列表的方式是使用 Convert.ChangeType(value, typeof(underlyingGenericValue)) 在 Try-Catch 块内,如果尝试失败,则将值设置为默认值使用 Activator 创建实例的类型。
标签: c# generics reflection collections casting