是否可以在VB.Net中实例化通用对象类型期间将参数传递给通用对象构造函数

时间:2017-02-24 19:20:02

标签: .net vb.net generics

对于Instance,我创建了一个如下定义的子例程:

Private Sub PCboPl(pList As List(Of Object), dt As DataTable)

    pList = New List(Of Object)
    dt = oDB.GSD()
    For Each dr In dt.Rows
        pList.Add(New Object(dr))
    Next

    pList = pList.OrderBy(Function(x) x.dName).ToList()
    cboP.ItemsSource = pList 
End Sub

以下原因造成太多争论的公共超载次级新()'错误消息

pList.Add(New Object(dr))

我怀疑这是因为我试图将参数传递给不存在的构造函数。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果我说得对,那么你的pList必须被声明为每个遗留代码的List(Of Object),但它实际上是另一种类型的列表(你在评论中提到的“包装”类) ,但在问题上没有任何地方)在构造函数中接收DataRow作为参数。

如果是这种情况,您只需将wrapper类的新实例添加到列表中。

pList.Add(New Wrapper(dr))

现在,请小心:

pList = pList.OrderBy(Function(x) x.dName).ToList()

x是对象,Object类型没有dName属性。 Visual Basic允许你做这种......“脏”的东西,但为了清楚起见,你应该至少CType x变量为Wrapper类型。

pList = pList.OrderBy(Function(x) CType(x,Wrapper).dName).ToList()

答案 1 :(得分:0)

我的问题的答案最终在此链接中找到

Create instance of generic type?

我将代码转换为VB.Net

我没有在Sub Routine定义中使用泛型对象,而是使用泛型类型,并且能够实例化泛型类型,同时将参数传递给它的构造函数。