为何VB中无法以扩展方法形式调用带显式泛型参数的泛型扩展方法?
VB中泛型扩展方法的显式类型参数调用问题
我定义了如下泛型扩展方法:
Module MyModule <Extension()> Public Function MyExtension(Of T)(value As T, i As T) As Short Return Nothing 'omitted' End Function End Module
目前我可以通过以下两种方式调用这个方法:
Dim fake As IFoo fake.Bar().MyExtension(1) MyModule.MyExtension(Of Integer)(fake.Bar(), 1)
但我发现没办法以扩展方法的形式传入显式泛型参数来调用它,比如下面这种写法是行不通的:
fake.Bar().MyExtension(Of Integer)(1)
而在C#里,我可以轻松用下面的语法实现这种调用:
IFoo fake = null; fake.Bar().MyExtension<int>(1);
请问在VB中有没有实现这种调用方式的办法?
解答
很遗憾,VB的语法设计里不支持直接以扩展方法的形式为泛型方法指定显式类型参数,这是VB和C#在泛型扩展方法调用语法上的一个明确差异。
不过你可以用两种替代方案来达到类似的效果:
- 第一种就是你已经用到的方式:直接通过定义扩展方法的模块来调用,显式指定类型参数,也就是
MyModule.MyExtension(Of Integer)(fake.Bar(), 1) - 第二种是如果场景允许,通过显式声明变量类型让编译器自动推断泛型参数,比如:
这样编译器会根据Dim barResult As Integer = fake.Bar() barResult.MyExtension(1)barResult的类型自动推断出T为Integer,无需你手动显式指定。
内容的提问来源于stack exchange,提问作者randomuser
相关产品推荐
相关产品推荐

