[VB.net] add List of String to dictionary

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 19-09 21:49

skate master

Autodesk Educator Expert

Topicstarter
Mensen,

voor mijn plugin ben ik bezig met het aanmaken van eigen filters welke worden opgeslagen in de AutoCAD database.
Wanneer de ik filters hard coded toevoeg werken ze prima, echter wanneer ik ze wil toevoegen op basis van een selectie in mijn plugin krijg ik een foutmelding.
Ik ben al een tijdje aan het zoeken maar zie niet wat ik fout doe, wie kan mij op gang helpen.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub saveNewFilter(ByVal sFilterType As String, ByVal sName As String)
Dim dictLoad As Dictionary(Of String, List(Of String)) = clsFilterData.getFilters(acDoc, acCurDb, acEd, "FILTERSETTINGS")

        Dim val As List(Of String) = New List(Of String)
        For Each myCntrl As myCustomLitsItem In flowLayouts.Controls
            If (myCntrl.IsModel = False) And (myCntrl.Visible = True) Then 
                Select Case sFilterType
                    Case "selected"
                        If myCntrl.CheckState Then 'layout is checked
                            val.Add(myCntrl.LayoutID.ToString)
                        End If

                    Case "visible"
                        val.Add(myCntrl.LayoutID.ToString)

                End Select
            End If
        Next

        dictLoad.Add(sName, val) '##### Hier ontstaat de error

        clsFilterData.saveFilters(acDoc, acCurDb, acEd, dictLoad, "FILTERSETTINGS")
end sub



foutmelding
Object reference not set to an instance of an object.

De foutmelding is op zich duidelijk, er is een verwijzing naar een object dat niet bestaat.
Alleen dictLoad bestaat, val bestaat en wordt netjes gevuld, sName bestaat en bevat gegevens.

Wanneer ik onderstaande code uitvoer werkt het wel.

Visual Basic .NET:
1
2
3
4
5
6
7
Sub saveNewFilter(ByVal sFilterType As String, ByVal sName As String)
Dim dictLoad As Dictionary(Of String, List(Of String)) = clsFilterData.getFilters(acDoc, acCurDb, acEd, "FILTERSETTINGS")

       dictLoad.Add("test", New List(Of String) From {"a", "b", "c"}

        clsFilterData.saveFilters(acDoc, acCurDb, acEd, dictLoad, "FILTERSETTINGS")
end sub


Waar zit mijn fout? Ik zie het niet meer, iemand wie mij op gang kan / wil helpen?

Beste antwoord (via skate master op 11-01-2018 09:45)


  • Cyphax
  • Registratie: November 2000
  • Laatst online: 18:58

Cyphax

Moderator LNX
Zou het kunnen dat op regel 2 die functie getFilters een Nothing teruggeeft? Dat zou je even kunnen checken. Als dat zo is moet je dat even afvangen.

[ Voor 5% gewijzigd door Cyphax op 10-01-2018 17:17 ]

Saved by the buoyancy of citrus

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 18:58

Cyphax

Moderator LNX
Zou het kunnen dat op regel 2 die functie getFilters een Nothing teruggeeft? Dat zou je even kunnen checken. Als dat zo is moet je dat even afvangen.

[ Voor 5% gewijzigd door Cyphax op 10-01-2018 17:17 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:03
Je loopt in regel 5 over alle controls die aanwezig zijn in flowLayout.Controls.

Je gaat iedere control gaan casten mbhv de as operator naar het type myCustomLstItem. Indien die control niet van dat type is, zal er null gereturned worden, vandaar de NullReferenceException.

Je zal dus moeten checken of het resultaat van die As cast geen null returned.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 19-09 21:49

skate master

Autodesk Educator Expert

Topicstarter
Cyphax schreef op woensdag 10 januari 2018 @ 17:16:
Zou het kunnen dat op regel 2 die functie getFilters een Nothing teruggeeft? Dat zou je even kunnen checken. Als dat zo is moet je dat even afvangen.
Stom dat ik daar overheen gekeken heb. Soms is het zo simpel 8)7 8)7
whoami schreef op woensdag 10 januari 2018 @ 17:19:
Je loopt in regel 2 over alle controls die aanwezig zijn in flowLayout.Controls.

Je gaat iedere control gaan casten mbhv de as operator naar het type myCustomLstItem. Indien die control niet van dat type is, zal er null gereturned worden, vandaar de NullReferenceException.

Je zal dus moeten checken of het resultaat van die As cast geen null returned.
Je hebt gelijk dat ik er een controle in moet bouwen of er wel het juiste control in de lijst staat. Echter op dit moment staan er enkel de juiste controls in de Flow en is de check in principe niet noodzakelijk.
Maar ik ga hem toch toevoegen om voorbereid te zijn op eventueele toevoegingen van controls.

Bedankt voor het meedenken alle twee.