5

已解决:IntelliSense 只是不显示扩展!

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

[<Extension>]
module Extension =
    [<Extension>]
    let Increment(value : System.Int32) = value + 1

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

x.Increment(); //Result x=1

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

x.Increment() 'No method called "Increment()" for type Int32

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

Increment(x) 'Works

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

4

1 回答 1

4

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

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

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

Imports A.Extension
Module Module1
    Sub Main()
        Console.WriteLine((1).Increment())
    End Sub
End Module

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

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

于 2013-06-17T17:31:53.673 回答