webForumDet fria alternativet

Nullable i VB.NET

.NET

3 svar · 810 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Frågan#1

Hej!

Länge sedan man pysslade med VB.NET och är därmed lost!

Jag har ett fält i en datatable som kan vara NULL eller int

Jag testar följande förenklade kod

 Dim i As Nullable(Of Integer) = dt.Rows(0).Item("Code")

...men får "specified cast is not valid".

Detta "borde" väl funka?

Medlem sedan okt. 2007446 inlägg
#2

jag satt själv o bråkade med nullable(of integer) inatt, visserligen så modifierade jag koden och bytte integer mot en enum, fast det var av helt andra orsaker

Det du får från din datatable är troligen en "dbNull" och den går inte att casta till en "nullable"
så du får troligen göra en koll, först om det är dbnull

            Dim i As Nullable(Of Integer)
            If IsDBNull(dt.Rows(0).Item("Code")) Then
                i = Nothing
            Else
                i =dt.Rows(0).Item("Code")
            End If

möjligen möjligtvis går det lika bra med

Dim i As Nullable(Of Integer) = IIf(IsDBNull(dt.Rows(0).Item("Code")), Nothing, dt.Rows(0).Item("Code"))
Medlem sedan feb. 20013 023 inlägg
#3

OK, trodde man skulle komma runt dessa If-satser med nullable datatyper, men icke så.

Medlem sedan jan. 20023 327 inlägg
#4

Det är även att föredra att använda ternary operatorn istället för IIf, då IIf kan kasta ett 'null pointer exception' om dt.Rows(0).Item("Code") evalueras till nothing.

Dim i As Nullable(Of Integer) = If(IsDBNull(dt.Rows(0).Item("Code")), Nothing, _
    dt.Rows(0).Item("Code"))
252 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)