359

W Perl (i innych języków) operator warunkowy trójskładnikowych można wyrazić tak:Czy w VB.NET jest operator warunkowej sieci trójskładnikowej?

my $foo = $bar == $buz ? $cat : $dog; 

Czy istnieje podobne operatora w VB.NET?

+13

Operator trójargumentowy jest każdy podmiot, który pobiera trzy argumenty, podobnie jak operator binarny dwojga i operator jednoargumentowy bierze jeden. Operator?: jest specyficznym przykładem operatora ternay, a nie definicji – Zooba

+82

Tak, dziękuję, ale ta informacja nie pomaga –

+20

To dlatego jest komentarzem, a nie odpowiedzią. Skomentowałem, że było poprawna odpowiedź określająca IIf, która prawdopodobnie zniknęła. – Zooba

Odpowiedz

474

Zależy. Operator If w VB.NET 2008 działa jako operator trójskładnikowy. Zostało to właśnie wprowadzone, przed 2008 rokiem nie było to możliwe. Oto kilka informacji: Visual Basic If announcement

Przykład:

Dim foo as String = If(bar = buz, cat, dog) 
+11

Przed rokiem 2008 był to IIf, który działał niemal identycznie jak operator If opisany w twoim linku. – Zooba

+104

... z ważną różnicą, że Iif(), będąc funkcją, zawsze oceniał zarówno następnik, jak i alternatywę, podczas gdy nowy Jeśli ocenia tylko jedną z nich. –

+6

co to znaczy? Jeśli (warunek, true-part, false-part). czy mogę rytuał? – kbvishnu

65

IIF zawsze dostępne w VB, nawet w VB6.

Dim foo as String = iif(bar = buz, cat, dog) 

To nie jest prawdziwy operator, jako taki, ale funkcja w przestrzeni nazw Microsoft.VisualBasic.

+30

Iif jest tylko w pobliżu operatora trójskładnikowego - co oznacza nie można go używać w każdych warunkach, które można wykonać w If If Else (lub potrójnym operatorze). Na przykład wartość = Iif (1 = 1, 0, 1/0) byłaby wysadzona, ale wartość = jeśli (1 = 1, 0, 1/0) nie ... –

+3

VB nie obsługuje oceny zwarć (z wyjątkiem operatora AndAlso), więc programiści VB tak naprawdę nie spodziewają się, że mogą bezpiecznie ocenić połowę operacji. Ale punkt widzenia, również iif jest funkcją hack, która została wprowadzona dla kompatybilności wstecznej, w przeciwnym razie byłby prawdziwym operatorem. –

+33

Miło jest skategoryzować wszystkich programistów VB ;-) A także IsNot i OrElse do skrótu, więc VB rzeczywiście obsługuje ewaluację zwarciową. – HardCode

18

Jeżeli() jest najbliższym odpowiednikiem ale uważaj domniemanego konwersji dzieje się jeśli masz set „Option Strict off”

Na przykład, jeśli nie jesteś ostrożny może ulec pokusie, aby spróbować czegoś takiego:

Dim foo As Integer? = If(someTrueExpression, Nothing, 2) 

Poda "foo" wartość 0!

Myślę, że "?" odpowiednik operatora w C# zamiast tego nie kompilacja

+5

Tylko dla kompletności, lepszym sposobem napisania tego wyrażenia jest 'Dim foo As Integer? = If (someTrueExpression, New Integer ?, 2) '. –

+5

Należy zauważyć, że dzieje się tak również w przypadku opcji "Option Strict On". Powodem jest, że 'Nothing' w VB.NET jest równoważne' C# 'default (T) 'zamiast' null'. – Heinzi

+1

A dla każdego zaintrygowanego przez 'Integer?' Oznacza to, że jest zerowalny - zobacz http://stackoverflow.com/questions/3628757/make-an-integer-null –

-5

Użyj tej linii,

foo=IIf(bar=buz,cat,dog) 
+2

To nie jest warunkowy operator potrójny.Jest to funkcja, która zachowuje się podobnie w pewnych okolicznościach –

1

Jeśli ([argument1,] argument2, argument3) Kiedy Jeśli nazywa się stosując trzy argumenty, pierwszy argument musi ocenić Do wartość, którą można rzutować jako wartość logiczną. Ta wartość logiczna określa, który z dwóch pozostałych argumentów jest oceniany i zwracany. Poniższa lista ma zastosowanie tylko wtedy, gdy operator If jest wywoływany za pomocą trzech argumentów.

2

Można użyć tego przykładu:

Dim MyResult As String = If(MyString = MyCondition, "trueValue", "falseValue") 
+1

Bezcelowa odpowiedź, która nie dodaje nic do już ustalonych rozwiązań, dodał lat późno w nadziei na uzyskanie rep. –

Powiązane problemy