2016-04-01 10 views
-4

ich die folgende if-Anweisung in meinem Code haben, würde ich gerne wissen, ob es eine Möglichkeit, esKann dieser Codeblock gekürzt werden?

if (ürün_kısakod.Text != "") 
{ 
    komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = Int16.Parse(ürün_kısakod.Text); 
} 
else 
{ 
    komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = DBNull.Value; 
} 

Antwort

6

Der ternäre Operator eine Option zu verkürzen ist, diesen Ausdruck zu verkürzen:

komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = 
    !string.IsNullOrEmpty(ürün_kısakod.Text) 
    ? (object)Int16.Parse(ürün_kısakod.Text) 
    : DBNull.Value 
    ; 

Eine bessere Wahl wäre, auch TryParse zu verwenden. Normalerweise würden Sie dem Benutzer melden, dass die Eingabe falsch war.

+0

Zustimmen, werde ich den Kommentar verlassen, aber ohne die med Iocre Probe. @HenkHolterman –

2

Zur Vermeidung von Wiederholungen und noch lesbar sein, das Sie

object val; 
if (String.IsNullOrEmpty(ürün_kısakod.Text)) { 
    val = Int16.Parse(ürün_kısakod.Text); 
} else { 
    val = DBNull.Value; 
} 

komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = val; 

tun können Und da Sie wahrscheinlich anderswo ähnliche Dinge tun werden, machen es eine Funktion (und machen es Generika auf der Basis der integer Breite, wenn Sie zu wollen):

object ParseInt16OrDbNull(string text) { 
    if (String.IsNullOrEmpty(text)) { 
     return Int16.Parse(text); 
    } else { 
     return DBNull.Value; 
    } 
} 

Und Ihr Code wird nur:

komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = ParseInt16OrDbNull(ürün_kısakod.Text); 
Verwandte Themen