Domanda

sto popolano l'oggetto cliente come illustrato di seguito. Come faccio avrei conciso codice qualcosa come la seguente?

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

Ecco il contesto mi piacerebbe utilizzarlo 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
È stato utile?

Soluzione

All'interno del namespace Microsoft.VisualBasic c'è una funzione chiamata IIF. Funziona valutando un'espressione e restituendo un valore se l'espressione è vera e un altro se falsa.

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

Nelle versioni più recenti di Visual Studio (2008 ~), questo è disponibile di default senza l'importazione un'importazione (IIF era una funzione, il nuovo If è un operatore):

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

Se non è stato DBNull, ma solo Nothing, è possibile utilizzare l'operatore null coalescenza:

Dim val = If(objectThatMightBeNothing, DefaultValueToUse)

MSDN per maggiori dettagli.

Altri suggerimenti

Hai provato questo:?

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

Speranza che aiuta.

Qual è il valore di età può avere se contiene nulla?
Io suggerisco di usare Nullable (Of Integer) per Age.

Inoltre, confrontarla DBNull.Value (che viene utilizzato per il confronto nel caso il campo sottostante contiene valore nullo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top