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

发布于 2025-01-08 06:23:48 字数 1041 浏览 0 评论 0 原文

我正在实现一个灵活的处理器,通过模板方法动态创建一些数据。一切正常,直到...我需要将元素添加到 ObservableCollection 并且我将包含集合的对象作为动态引用。

所以我有这个:

dynamic componentItem = Activator.CreateInstance(targetType);

targetType (UxBillingLineItem) 包含此属性,该属性在默认构造函数中初始化:(

public ObservableCollection<UxBillingLineItem> ComponentServices { get; set; }

嵌套是有意的)

我创建一个元素以添加到此集合中:

object comp = Activator.CreateInstance(targetType);

然后我这样做来添加它:

componentItem.ComponentServices.Add(comp);

但我得到这个例外: 'System.Collections.ObjectModel.Collection.Add(UxBillingLineItem) 的最佳重载方法匹配有一些无效参数”

编辑... 我已经考虑过执行 Convert.ChangeType(comp, targetType) 但仍然返回对象,而不是 targetType 并返回相同的错误。
还查看了:

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

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

I'm implementing a flexible processor to dynamically create some data via a template approach. Everything working well until... I need to add elements to an ObservableCollection<item> and I'm referencing the object containing the collection as a dynamic.

So I have this:

dynamic componentItem = Activator.CreateInstance(targetType);

targetType (UxBillingLineItem) contains this property which is initialized in the default constructor:

public ObservableCollection<UxBillingLineItem> ComponentServices { get; set; }

(The nesting is deliberate)

I create an element to add to this collection:

object comp = Activator.CreateInstance(targetType);

Then I do this to add it:

componentItem.ComponentServices.Add(comp);

But I get this exception:
The best overloaded method match for 'System.Collections.ObjectModel.Collection<UxBillingLineItem>.Add(UxBillingLineItem) has some invalid arguments"

Edit...
I've looked at doing Convert.ChangeType(comp, targetType) but that still returns object, not targetType and returns the same error.
Also looked at:

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

but that still needs a type at compile time, not a variable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生一梦 2025-01-15 06:23:48

出现此问题的原因是您无法将 System.Object 添加到强类型 ObservableCollection。为了解决这个问题,您的 comp 变量需要输入为 UxBillingLineItem例如

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

The problem occurs because you can't add a System.Object to a strongly typed ObservableCollection<UxBillingLineItem>. To address this, your comp variable needs to be typed as UxBillingLineItem. e.g.:

UxBillingLineItem comp = (UxBillingLineItem)Activator.CreateInstance(targetType); 
梦忆晨望 2025-01-15 06:23:48

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

私有列表> CreateBillingItemsFromMap>(参考RatingData ratingData、动态processMap、Hashtable propertyMap)其中T:new()

Nicole Calinoiu provided the best answer - generics. I modified my method to use a generic type and everything works as expected.

private List<T> CreateBillingItemsFromMap<T>(ref RatingData ratingData, dynamic processMap, Hashtable propertyMap) where T : new()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文