vb.net:使用泛型时调用构造函数

标签 vb.net generics

我不确定这是否可能。

我有许多实现接口(interface) IBar 的不同类,并且具有采用几个值的构造函数。与其创建一堆几乎相同的方法,是否可以有一个通用方法来创建适当的构造函数?

private function GetFoo(Of T)(byval p1, byval p2) as List(Of IBar)
  dim list as new List(Of IBar)

  dim foo as T

  ' a loop here for different values of x
     foo = new T(x,p1) 
     list.Add(foo)
  ' end of loop
  return list
end function

我得到:
'New' cannot be used on a type parameter that does not have a 'New' constraint. 

最佳答案

不幸的是,.NET 泛型仅允许您将泛型类型约束为具有无参数构造函数,然后您可以使用 New T() 调用它...您不能指定一组特定的参数。

如果您不介意使您的类型可变,您可以创建一个包含具有相关参数的方法的接口(interface),使您的所有类型都实现该接口(interface),然后约束该类型以实现该方法并具有一个无参数构造函数,但它是不理想。

另一种选择是传入适当的 Func需要xp1并返回一个新的 T每一次。这在 C# 中肯定很容易使用 - 在 VB IIRC 中并不那么容易,但仍然值得考虑。

关于vb.net:使用泛型时调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251745/

相关文章:

java - 尝试在泛型类中应用 lambda 表达式时出现类型不匹配编译错误

vb.net - = 什么时候执行比较而不是赋值?

java - 如何在 Java 中创建与旧列表相同类型的新列表?

swift - 将 JSON 编码器与 Codable 类型的计算变量结合使用

c# - 获取 'T' 必须是具有公共(public)无参数构造函数的非抽象类型,才能将其用作泛型类型或方法中的参数 'T'

java - 将不同的参数化类型存储在 Java 中的同一个泛型数组列表中

.net - Nhibernate vb.net mvc 无法编译映射

css - 在 asp.net 中跨多个页面打印具有许多列标题的 Datagrid 表

asp.net - 禁用所有浏览器上的缓存

vb.net - JSON.NET 中的条件对象序列化