2014-09-24 18 views
10

arasındaki farklar Durum eğer VB'de koşulların doğrudan alınıp verilmemesini gerektiriyorsa neden koşulludur. C# Örneğin bu ...C# ve VB

 bool i = false; 

     i = (1<2)? true:false; 

     int x = i? 5:6; 

gayet güzel Ama VB aynı şeyi isteyip istemediğini C# yapacak neden

Dim i as Boolean = CBool(IIF(1<2, True, False)) 
Dim x as Integer = CInt(IIF(i, 5, 6)) 

anlamıyorum döküm zorunda kalacak dönüşümü ve neden VB'yi değil. Ben conditionals Evet IIF tipi nesnesi döndüren ama bu C# yanı sadece doğru daha dönebilir olarak yapar varsayılabilir farkındayım, Ayrıca

bool i = Convert.ToBoolean((1<2)? True: False); 
int x = Convert.ToInt32(i? 5:6); 

örneğin benim C# üzerinde döküm olmalı | Yanlış; Görünüşe göre C# örtük dönüşümü ele alıyor.

+12

'IIF', eski bir VB işlevidir; Yeni 'If' Operatörü ile deneyin ve beklediğiniz gibi çalışır: 'Dim i As Boolean = Eğer (1 <2, Doğru, Yanlış) ' – Plutonix

+2

' <'operatör (diğer tüm karşılaştırma işleçleri gibi) zaten döndürür Doğru ya da yanlış, lütfen bunu bir daha yapma: '(1 <2)? true: false; ' –

+0

Bilgi için hepinize teşekkür ederim :) Evet @BrianDriscoll Normalde bunu yapmazdım Ne demek istediğimin hızlı bir mantığını göstermeye çalışıyordum - emin olmak için teşekkür ederim. – alykins

cevap

26

IIf bir fonksiyonudur ve denk olmayan bir operatörün, C#’in ?:.

operatör versiyonu olsa da, VB.NET bir süre var olmuş ve sadece If denir: anlamsız, elbette

Dim i As Boolean = If(1 < 2, True, False) 

... ve tıpkı yazılmalıdır:

Option Infer ile
Dim i As Boolean = 1 < 2 

... veya:

Dim i = 1 < 2 
+0

Bu bilgi için teşekkürler; çok yararlı. Yeni geliştirme Neredeyse her zaman C# yapıyorum ama çok fazla eski dönüşümler/yükseltmeler de yapıyorum (neredeyse her zaman VB'de); VB – alykins

+2

@ alykins'te sadece IF (x, x, x) 'nin farkında değildi: VB'de değil sadece VB.NET'de ve 2008'den beri var. –

6

Bu kod olacak IIf işlevi ve If operatörü arasındaki farkı gösterir. IIf bir işlev olduğundan, tüm parametrelerin işleve iletilmesi gerekir.

Sub Main 
    dim i as integer 
    i = If(True, GetValue(), ThrowException()) 'Sets i = 1. The false part is not evaluated because the condition is True 
    i = IIf(True, GetValue(), ThrowException()) 'Throws an exception. The true and false parts are both evaluated before the condition is checked 
End Sub 

Function GetValue As Integer 
    Return 1 
End Function 

Function ThrowException As Integer 
    Throw New Exception 
    Return 0 
End Function