我正在实施一个灵活的处理器,通过模板方法动态创建一些数据。一切运作良好,直到......我需要向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));
}
但是在编译时仍需要一个类型,而不是变量。
答案 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()