将ObjectCollection中的项添加到IList(Of SomeType)

时间:2010-11-12 11:49:15

标签: .net vb.net collections object ilist

如何将ObjectCollection项添加到IList(Of SomeType)? 我尝试过:

For Each obj As SomeType In listBox.Items 'ObjectCollection
    MyObject.ItProperty.Add(obj) 'IList
Next

没有成功。 谢谢。

2 个答案:

答案 0 :(得分:1)

如果可能,非通用IList接口将是最简单的方法:

IList list = (IList)MyObject.ItProperty;
list.Add(obj);

否则,您将不得不:

  • 找到合适的T(使用反射)
  • Add(使用反射)
  • 解析IList<T>方法
  • 调用Add方法(使用反射)

在泛型上反射,尤其是并不好。

作为替代方案 - 如果您有4.0,则可以尝试使用dynamic,但请注意,这只会看到公共API。值得一试(仅当IList失败时):

dynamic list = MyObject.ItProperty;
list.Add(obj); // let's hope Add isn't an explicit interface implementation

答案 1 :(得分:0)

您可以添加一些有关失败和失败的详细信息吗?你的代码应该有用。

如果您在“"Unable to cast object of type 'XXX' to type 'SomeType'."”行收到异常For Each obj,则listBox.Items集合中至少有一个项目不属于“SomeType”类型。