向动态变量的observablecollection属性添加元素时发生异常
本文关键字:元素 异常 添加 属性 动态 变量 observablecollection | 更新日期: 2023-09-27 18:25:23
我正在实现一个灵活的处理器,通过模板方法动态创建一些数据。一切正常,直到。。。我需要向ObservableCollection<item>
添加元素,并且我将包含集合的对象作为动态引用。
所以我有这个:
dynamic componentItem = Activator.CreateInstance(targetType);
targetType(UxBillingLineItem
)包含此属性,该属性在默认构造函数中初始化:
public ObservableCollection<UxBillingLineItem> ComponentServices { get; set; }
(嵌套是故意的)
我创建了一个元素添加到这个集合中:
object comp = Activator.CreateInstance(targetType);
然后我这样做来添加它:
componentItem.ComponentServices.Add(comp);
但我得到了一个例外:The best overloaded method match for 'System.Collections.ObjectModel.Collection<UxBillingLineItem>.Add(UxBillingLineItem)
有一些无效参数"
编辑。。。我已经考虑过执行Convert.ChangeType(comp, targetType)
,但它仍然返回object,而不是targetType,并返回相同的错误
还查看了:
public T ConvertType<T>(object input)
{
return (T)Convert.ChangeType(input, typeof(T));
}
但在编译时仍然需要一个类型,而不是一个变量。
由于无法将System.Object
添加到强类型ObservableCollection<UxBillingLineItem>
中,因此会出现此问题。要解决此问题,您的comp变量需要键入为UxBillingLineItem
例如:
UxBillingLineItem comp = (UxBillingLineItem)Activator.CreateInstance(targetType);
Nicole Calinoiu提供了最好的答案-泛型。我修改了我的方法以使用泛型类型,一切都如预期的那样工作。
private List <T
>CreateBillingItemsFromMap <T
>(ref RatingData RatingData,dynamic processMap,Hashtable propertyMap)其中T:new()