2013-06-17 41 views
5

Rozwiązany: IntelliSense po prostu nie wyświetla rozszerzenia!Nie można połączyć się z rozszerzeniem F # w VB.Net

Powiedzmy mamy następującą metodę rozszerzenia w F #:

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

W języku C# można nazwać go jak w ten sposób:

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

Ale odpowiednikiem kodu VB to zwraca błąd , nie znajduje metody rozszerzenia dla typu integer:

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

While to możliwe, aby wywołać metodę przez standardowy sposób:

Increment(x) 'Works 

Więc gdzie jest różnica między VB obsługi i C# na wywołanie kodu F #, dlaczego nie jest to środowisko VB stanie rozwiązać metody rozszerzenie?

+0

W jaki sposób zadeklarowano 'x' (po stronie VB)? –

+0

Próbowałem: Dim x jako Integer/Int32 lub Just Dim x = 0I, wszystkie trzy sposoby nie działały dla mnie –

+0

Czy masz odpowiednią deklarację "Imports" w zakresie? –

Odpowiedz

4

Jeśli budować regularny F projekt # biblioteki

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

a następnie odnieść się do tej biblioteki z projektu VB

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

następnie VB traktuje F Sposób nr wewnętrzny zgodnie z oczekiwaniami <Extension>Public Function Increment() As Integer i działa poprawnie, dając 2 jako wynik.

Czysty eksperyment nie wskazuje specyficznej dla VB idiosynkrazji na zdefiniowane przez F # metody rozszerzenia.

+0

To faktycznie działa, ale z jakiegoś powodu intellisense nie pokazuje funkcji Increment ... Może to było powodem, który utrudnił mi życie podczas debugowania tego. Dziękuję :) –

+0

@ TimKrüger tak, ReSharper ma również problemy w tym: http://youtrack.jetbrains.com/issue/RSRP-288188 http://youtrack.jetbrains.com/issue/RSRP-328715 –

Powiązane problemy