TravoniMedlem sedan okt. 20041 556 inlägg 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
CrypthMedlem sedan nov. 200612 inlägg 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") ?
TravoniMedlem sedan okt. 20041 556 inlägg Ok, detta ger samma fel:
Dim attribPostBack As XmlAttribute = Nothing
attribPostBack = menuItem.Attributes("postback")
CrypthMedlem sedan nov. 200612 inlägg 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...
TravoniMedlem sedan okt. 20041 556 inlägg 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.
CrypthMedlem sedan nov. 200612 inlägg 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;" ?
emissionMedlem sedan dec. 19996 721 inlägg In en IIf evalueras alla parametrar innan villkorsuttrycket, så man kan inte använda det på detta sätt.