向动态变量的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));
}

但在编译时仍然需要一个类型,而不是一个变量。

向动态变量的observablecollection属性添加元素时发生异常

由于无法将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()