无法在VB.Net中调用F#Extension

Tim*_*ger 5 c# vb.net extension-methods f#

解决:IntelliSense只是没有显示扩展!

假设我们在F#中获得了以下扩展方法:

[<Extension>]
module Extension =
    [<Extension>]
    let Increment(value : System.Int32) = value + 1
Run Code Online (Sandbox Code Playgroud)

在C#中,我可以这样称呼它:

x.Increment(); //Result x=1
Run Code Online (Sandbox Code Playgroud)

但是等效的VB代码返回错误,它没有找到类型整数的扩展方法:

x.Increment() 'No method called "Increment()" for type Int32
Run Code Online (Sandbox Code Playgroud)

虽然可以通过标准方式调用方法:

Increment(x) 'Works
Run Code Online (Sandbox Code Playgroud)

那么在调用F#代码时处理VB和C#之间的区别在哪里,为什么VB环境不能解析扩展方法?

Gen*_*ski 4

如果您构建常规 F# 库项目

namespace A
open System.Runtime.CompilerServices
[<Extension>]
module Extension =
    [<Extension>]
    let Increment(value : System.Int32) = value + 1
Run Code Online (Sandbox Code Playgroud)

然后从VB项目中引用这个库

Imports A.Extension
Module Module1
    Sub Main()
        Console.WriteLine((1).Increment())
    End Sub
End Module
Run Code Online (Sandbox Code Playgroud)

然后 VB 按预期处理 F# 扩展方法<Extension>Public Function Increment() As Integer并正常工作,并给出2输出。

干净的实验并不表明 F# 定义的扩展方法有任何特定于 VB 的特性