webForumDet fria alternativet
Logga in / Bli medlem

System.NullReferenceEx ifrån XmlAttribute

.NET

6 svar · 414 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Jag får NullReferenceException på den rödmarkerade raden, hur undviker jag det?

Dim attribPostBack As XmlAttribute = menuItem.Attributes("postback")
Dim postBack As Boolean
     Try
          [red]postBack = IIf(Not (attribPostBack Is Nothing), Boolean.Parse(attribPostBack.Value), False)[/red]
     ....

I XML-filen så ser det ut så här:

<item postback="True">
</item>
eller
så här
<item>
</item>

Alltså saknas postback så skall värdet sättas till False

Medlem sedan nov. 200612 inlägg
#2

Det verkar som om attribPostBack inte initialiseras om xmlattributet inte har något värde, vilket ger en nullpekare. Jag kan naturligtvis ha fel och jag är ingen fena på VB, men vad händer om du initialiserar attribPostBack med nothing först, för att efter det försöka tilldela den menuItem.Attributes("postback") ?

Medlem sedan okt. 20041 556 inlägg
#3

Ok, detta ger samma fel:

Dim attribPostBack As XmlAttribute = Nothing
attribPostBack = menuItem.Attributes("postback")
Medlem sedan nov. 200612 inlägg
#4

Uff, det innebär troligen att den refererar till menuItem.Attributes("postback") inte till din variabel.

If menuItem.Attributes("postback") Is Nothing Then
...

funkar inte bättre?

Skjuter lite från höften här, har inte riktigt tid att testa...

Medlem sedan okt. 20041 556 inlägg
#5

mmm, detta funkar:

If menuItem.Attributes("postback") Is Nothing Then
    postBack = False
Else
    postBack = Boolean.Parse(attribPostBack.Value)
End If

Men inte detta:

postBack = IIf(menuItem.Attributes("postback") Is Nothing, False, Boolean.Parse(attribPostBack.Value))

Av någon märklig anledning.

Medlem sedan nov. 200612 inlägg
#6

Det kan tänkas att nyckelordet IIf tilldelar en lokal variabel värdet av menuItem.Attributes("postback") för jämförelsen, men det verkar skumt... är du väldigt intresserad kan du ju kolla vad du får ut av kompilatorn i intermediate language ;)

Jag antar att "x = IIf( jmfr, true, false)" funkar som C# "x = jmfr ? true : false;" ?

Medlem sedan dec. 19996 721 inlägg
#7

In en IIf evalueras alla parametrar innan villkorsuttrycket, så man kan inte använda det på detta sätt.

251 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)