2013-06-17 33 views
5

Đã giải quyết: IntelliSense không hiển thị Tiện ích mở rộng!Không thể gọi F # Extension trong VB.Net

phép nói rằng chúng tôi đã nhận các phương pháp khuyến nông sau trong F #:

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

Trong C# Tôi có thể gọi nó như thế này:

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

Nhưng đoạn code VB tương đương này trả về một lỗi , nó không tìm thấy phương pháp mở rộng cho loại số nguyên:

Trong khi có thể gọi phương thức theo cách tiêu chuẩn:

Increment(x) 'Works 

Vì vậy, sự khác biệt giữa việc xử lý VB và C# khi gọi mã F #, tại sao môi trường VB không thể giải quyết các phương pháp mở rộng?

+0

Bạn có khai báo 'x' như thế nào (ở phía bên VB)? –

+0

Tôi đã thử: Dim x As Integer/Int32 hoặc chỉ Dim x = 0I, tất cả ba cách không làm việc cho tôi –

+0

Bạn có khai báo 'Imports' đúng trong phạm vi không? –

Trả lời

4

Nếu bạn xây dựng một F dự án # thư viện thường xuyên

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

và sau đó tham khảo thư viện này từ dự án VB

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

sau đó VB đối xử với F phương pháp # mở rộng như mong đợi <Extension>Public Function Increment() As Integer và làm việc một cách chính xác, đem lại cho 2 như đầu ra.

Thử nghiệm sạch sẽ không chỉ ra bất kỳ đặc điểm riêng biệt nào của VB đối với phương pháp mở rộng F # - đã xác định.

+0

Điều này thực sự hiệu quả, nhưng vì lý do nào đó, intellisense không hiển thị hàm Increment ... Có lẽ đó là lý do khiến cuộc sống khó khăn cho tôi trong khi gỡ lỗi này. Cảm ơn bạn :) –

+0

@ TimKrüger yeah, ReSharper cũng có các vấn đề xung quanh vấn đề này: http://youtrack.jetbrains.com/issue/RSRP-288188 http://youtrack.jetbrains.com/issue/RSRP-328715 –

Các vấn đề liên quan