Trong Perl (và các ngôn ngữ khác), một toán tử ternary có điều kiện có thể được biểu diễn như sau:
my $foo = $bar == $buz ? $cat : $dog;
Có một toán tử tương tự trong VB.NET không?
Trong Perl (và các ngôn ngữ khác), một toán tử ternary có điều kiện có thể được biểu diễn như sau:
my $foo = $bar == $buz ? $cat : $dog;
Có một toán tử tương tự trong VB.NET không?
Câu trả lời:
Phụ thuộc vào phiên bản. Các If
nhà điều hành trong VB.NET 2008 là một nhà điều hành ternary (cũng như một nhà điều hành kết dính null). Điều này chỉ mới được giới thiệu, trước năm 2008 này không có sẵn. Dưới đây là một số thông tin: Visual Basic If thông báo
Thí dụ:
Dim foo as String = If(bar = buz, cat, dog)
[BIÊN TẬP]
Trước năm 2008, nó đã IIf
hoạt động gần như giống hệt với If
toán tử được mô tả ở trên.
Thí dụ:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
luôn trả về một đối tượng kiểu Object
, trong khi If(bool, obj, obj)
cho phép kiểm tra kiểu với tùy chọn nghiêm ngặt trên. ( Dim var As Integer = Iif(true, 1, 2)
sẽ không biên dịch với tùy chọn nghiêm ngặt vì bạn có thể dễ dàng viết Dim var As Integer = Iif(true, new Object(), new Object())
. Bạn có thể viết Dim var As Integer = If(true, 1, 2)
với tùy chọn nghiêm ngặt mặc dù vì nó sẽ kiểm tra loại được trả về.)
iif luôn có sẵn trong VB, ngay cả trong VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Nó không phải là một toán tử thực sự, như vậy, nhưng là một chức năng trong không gian tên Microsoft.VisualBasic.
Nếu () là tương đương gần nhất nhưng hãy cẩn thận với các chuyển đổi ngầm đang diễn ra nếu bạn đã đặt "Tắt tùy chọn"
Ví dụ: nếu không cẩn thận, bạn có thể muốn thử một cái gì đó như:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Sẽ cho "foo" giá trị 0!
Tôi nghĩ rằng '?' toán tử tương đương trong C # thay vì thất bại trong việc biên dịch
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. Lý do là Nothing
trong VB.NET tương đương với C # default(T)
chứ không phải null
.
Integer?
điều đó có nghĩa là nó không thể thực hiện được - hãy xem stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
).