将元素添加到动态变量的observablecollection属性的异常

时间:2012-02-21 16:10:05

标签: c# c#-4.0 dynamic observablecollection

我正在实施一个灵活的处理器,通过模板方法动态创建一些数据。一切运作良好,直到......我需要向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)但仍然返回对象,而不是targetType并返回相同的错误 还看了看:

public T ConvertType<T>(object input)
{
  return (T)Convert.ChangeType(input, typeof(T));
}

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

2 个答案:

答案 0 :(得分:1)

出现此问题是因为您无法将System.Object添加到强类型ObservableCollection<UxBillingLineItem>。要解决此问题,需要将您的comp变量键入为UxBillingLineItem e.g

UxBillingLineItem comp = (UxBillingLineItem)Activator.CreateInstance(targetType); 

答案 1 :(得分:0)

Nicole Calinoiu提供了最佳答案 - 仿制药。我修改了我的方法以使用泛型类型,一切都按预期工作。

私人列表<T&gt; CreateBillingItemsFromMap <T&gt;(ref RatingData ratingData,动态processMap,Hashtable propertyMap)其中T:new()