webForumDet fria alternativet

Nullable i VB.NET

3 svar · 810 visningar · startad av clarkbones

clarkbonesMedlem sedan feb. 20013 023 inlägg
#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?

rhdfMedlem 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"))
clarkbonesMedlem sedan feb. 20013 023 inlägg
#3

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

CompusaMedlem 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"))
126 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)