2013-06-17 15 views
5

Çözüm: IntelliSense, yalnızca Uzantıyı göstermiyor!VB.Net'te F # Uzantısı aranamadı

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

Ama bu eşdeğer VB kod hata verir: C# '

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

bu yol gibi diyebilirsiniz:

F # aşağıdaki uzatma yöntemi var Diyelim , tamsayı türü için tamsayı yöntemini bulamaz:

standart arada yöntemini çağırmak mümkündür:

Increment(x) 'Works 

Peki, neden VB çevre uzatma yöntemleri çözebilirsiniz F # kodunu çağırmayı elleçleme VB ve C# arasındaki fark olmadığı yerde?

+0

Nasıl x '(VB tarafında) bildirildi? –

+0

Denedim: Dim x Tamsayı/Int32 veya sadece Dim x = 0I, üç yol benim için işe yaramıyor –

+0

Uygun 'Imports' bildirimi kapsamına sahip misiniz? –

cevap

4

Eğer 2 vererek daha sonra VB beklenen <Extension>Public Function Increment() As Integer olarak F # uzantısı yöntemi davranır ve düzgün çalıştığını

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

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

ve sonra VB projesinden bu kitaplığa bakın düzenli F # kitaplığı proje oluşturmak, çıktı olarak

Temiz bir deney, F # tanımlı uzantı yöntemleri için herhangi bir VB'ye özgü kimlik tespiti olduğunu göstermez.

+0

Bu aslında işe yarıyor, ama bir sebepten dolayı intellisense Increment fonksiyonunu göstermiyor ... Belki de bu, hata ayıklama yaparken hayatımı zorlaştıran sebepti. Teşekkürler :) –

+0

@ TimKrüger evet, ReSharper da bu konuda sorunları var: http://youtrack.jetbrains.com/issue/RSRP-288188 http://youtrack.jetbrains.com/issue/RSRP-328715 –