2008-08-26 29 views
10

Gần đây tôi đã hỏi một câu hỏi về IIf vs. If và phát hiện ra rằng có một hàm trong VB gọi Nếu mà về cơ bản làm điều tương tự như IIf nhưng là một ngắn mạch.Nếu, IIf() và Nếu()

Có phải điều này Nếu chức năng hoạt động tốt hơn chức năng IIf? Câu hỏi Nếu có tuyên bố là Nếu các chức năngIIf?

Trả lời

14

Chết tiệt, tôi thực sự nghĩ bạn đang nói về nhà điều hành tất cả cùng. ;-) Dù sao…

Điều này có thực hiện chức năng tốt hơn chức năng IIf không?

Chắc chắn. Hãy nhớ rằng, nó được xây dựng trong ngôn ngữ. Chỉ một trong hai đối số có điều kiện phải được đánh giá, có khả năng tiết kiệm một hoạt động tốn kém.

Câu lệnh If có lớn hơn chức năng If và IIf không?

Tôi nghĩ bạn không thể so sánh cả hai vì chúng làm những việc khác nhau. Nếu mã của bạn ngữ nghĩa thực hiện một nhiệm vụ, bạn nên nhấn mạnh điều này, thay vì quyết định. Sử dụng toán tử If tại đây thay vì câu lệnh. Điều này đặc biệt đúng nếu bạn có thể sử dụng nó trong việc khởi tạo một biến vì nếu không thì biến sẽ được mặc định khởi tạo, kết quả là mã chậm:

Dim result = If(a > 0, Math.Sqrt(a), -1.0) 

' versus 

Dim result As Double ' Redundant default initialization! 
If a > 0 Then 
    result = Math.Sqrt(a) 
Else 
    result = -1 
End If 
1

Một điều rất quan trọng khác biệt giữa IIf()If() là với Option Infer On sau này sẽ ngầm đưa các kết quả vào cùng một kiểu dữ liệu trong một số trường hợp nhất định, vì nơi IIf sẽ trả về Object.

Ví dụ:

Dim val As Integer = -1 
    Dim iifVal As Object, ifVal As Object 
    iifVal = IIf(val >= 0, val, Nothing) 
    ifVal = If(val >= 0, val, Nothing) 

Output:
iifVal có giá trị Không có gì và loại Object
ifVal có giá trị từ 0 và loại Integer, b/c nó được ngầm chuyển đổi có gì để một Integer.