Frage

Ich bin Bestücken des Kundenobjekts, wie unten dargestellt. Wie kann ich würde ich prägnant Code so etwas wie die folgenden?

If IsDbNull(.Age) Then 
  .Age = 10
Else
  .Age = dataRow("Age")
End If 

Hier ist der Zusammenhang mag ich es zu benutzen, in:

Public Shared Function Retrieve() As List(Of Customer)

  Dim dt As DataTable = Dac.ExecuteDataTable("CustomerRetrieveAll", Nothing)
  Dim customerList As New List(Of Customer)

  For Each dr As DataRow In dt.Rows 
    customerList.Add(New Customer {
                       .CustomerId = CType(dr("CustomerID"), Integer),
                       .LastName = dr("LastName").ToString,
                       .Age = dr("Age").ToString,
                       .FirstName = dr("FirstName").ToString})  
  Next

  Return customerList 
End Function
War es hilfreich?

Lösung

Im Microsoft.VisualBasic Namensraum gibt es eine Funktion namens IIF. Es funktioniert durch die Auswertung eines Ausdrucks und der Rückkehr einen Wert, wenn der Ausdruck wahr ist, und eine andere, wenn falsch.

So

.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())

In neueren Versionen von Visual Studio (2008 ~), ist dies standardmäßig ohne Import verfügbar ein Import (IIF war eine Funktion, die neue If ist ein Operator):

.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())

Wenn es nicht DBNull ist, aber nur Nothing, können Sie den Null koaleszierende Operator verwenden:

Dim val = If(objectThatMightBeNothing, DefaultValueToUse)

Siehe MSDN für mehr Details.

Andere Tipps

Haben Sie dies versuchen:

.Age = IIf(dr("age") is DbNull, 10, dr("age"))

Hope es hilft.

Was Wert das Alter haben kann, wenn sie enthält null?
Ich schlage vor, mit Nullable (Of Integer) für Alter.

Auch vergleicht es gegen DBNull.Value (die zum Vergleich in dem Fall verwendet wird, die zugrunde liegende Feld enthält Nullwert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top