[.NET] Generic list of structure/class

Pagina: 1
Acties:
  • 215 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Goedemiddag,

Ik loop tegen een raar probleem aan bij het maken van een eigen component.
Dit component moet een lijst bijhouden van een structure (of class, dat maakt niet zo heel veel uit in deze)

Deze lijst heb ik alsvolgt gedeclareerd:

code:
1
private lstElements as new list(of Element)


Element is een structure met een paar 'properties'.
Bij het runnen krijg ik echter de volgende foutmelding:

code:
1
Run-time exception thrown : System.ArgumentException - Cannot find the method on the object instance.

Verander ik de lstElements in een list(of string) dan gaat alles prima. (ja behalve dan dat de code niet werkt natuurlijk, het crasht niet)

Rara hoe kan dit....
Op internet kan ik niets vinden. Ik kom alleen maar problemen m.b.t het instantieren van een class in een externe dll tegen en daar heeft dit probleem, m.u.v. het karakter van de foutmelding, niets mee te maken.

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

C#:
1
2
3
4
5
6
7
8
9
10
public struct Xyz
{
  public string Abc;
  public string Def;
}

List<Xyz> list = new List<Xyz>();
list.Add(new Xyz());
list[0].Abc = "Hello";
list[0].Def = "world";


Bovenstaand werkt bij mij gewoon goed. Is Element wel een type. Ik heb het vermoeden dat Element een instantie van een type is.

Aangezien je geen code hebt gepost, kan ik alleen maar raden hoe je code eruit ziet..

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Is 'Element' stiekem een reserved keyword?

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Wat is Element in jouw code ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Element is een structure met een paar strings en integers.
Als ik dit naar een class om zet met properties krijg ik dezelfde error.

Element is geen reserved keyword. Ik heb ook geprobeerd om andere namen te gebruiken, maar dat maakt niets uit.

Het zou ook gewoon moeten werken, in andere applicaties werken dergelijke constructies gewoon.

even een screenshot met wat meer duidelijkheid:

Afbeeldingslocatie: http://www.interstaff.nl/temp/got_error.png

Elements oorspronkelijke naam was SortColumn, dus vandaar dat ie weer zo heet. :)

[ Voor 22% gewijzigd door Rhapsody op 27-11-2007 14:09 ]

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • Xyzar_
  • Registratie: September 2007
  • Laatst online: 01-09-2014
Mag je new wel gebruiken in de declaratie? moet je hem niet eerst declareren, en in je constructor New pas aanroepen?

nou ben ik verder niet zo bekend met VB maar je declareerd die struct nadat je de lijst declareerd, wellicht kan hij hem dan gewoon niet vinden?

Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Tot zover ik weet zou dat niet uit mogen maken.
edit: heb het nog even geprobeerd, maar dat maakt inderdaad niets uit.

Maar de foutmelding suggereert ook heel wat anders... "Cannot find the method on the object instance"
Alsof hij de methoden van een Generic List niet vinden kan.

[ Voor 15% gewijzigd door Rhapsody op 27-11-2007 14:23 ]

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • purge
  • Registratie: November 2000
  • Niet online
Maakt hij wel gebruik van de Generic.List of 'toevallig' een aangepast List object?
Probeer eens om lstElements met de volledige NameSpace te declareren?

Visual Basic .NET:
1
Private lstElements As New System.Collections.Generic.List(Of SortColumn)

Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Helaas veranderd dat niets. :(

Ik ben nu aan het kijken of het ik met een eenvoudige collection op kan lossen.

[ Voor 58% gewijzigd door Rhapsody op 27-11-2007 14:46 ]

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Dit lijkt me wel heel vreemd .... Heb je al eens geprobeerd om je VS.NET af te sluiten, obj van je solution files te deleten, en desnoods je temp directory te legen ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Maak van dim eens public. Volgens mij staat dim gelijk aan private en dus heb je voor 'List' een lege structure..
Visual Basic:
1
2
3
4
Public Structure SortColumn
  Public ColumnIndex as Integer
  ..
end structure

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
^^
Dan nog zou dit geen exception mogen geven imho; ten hoogste een compiler error, en dan nog...
Je kan toch niet verwachten dat je compiler je zo bij het handje neemt, dat je geen object dat alleen maar private members heeft aan een collectie kunt toevoegen

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Wel als deze verder geen methodes heeft. De code is in principe gewoon correct, vergelijkbaar met een null-reference exceptie. Die wordt ook niet tijdens het compileren opgemerkt.

List verwacht en krijgt een type toegewezen. Tijdens de runtime blijkt dat het type 'leeg' is.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Eh, * whoami niet goed fris.

Ik dacht dat z'n IDE een exceptie ging gaan gooien.

Maareh, hier werkt dat gewoon hoor; een generic list maken die types aankan die enkel private members hebben (en dus ook geen public methods). Zinnig is wat anders, maar het zou gewoon geen excepties mogen gooien

[ Voor 54% gewijzigd door whoami op 27-11-2007 15:24 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 09:31
Je zegt dat het niet uitmaakt maar doet hij hetzelfde als je er een class van maakt?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik heb net inderdaad ook even snel een vb projectje aangemaakt. Maar zowel met dim als public krijg ik geen excepties. Een andere mogelijk kan natuurlijk ook de inhoud van de list zijn.


Hieronder mijn project code.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Imports System
Imports System.Collections.Generic

Public Class Program
    Private Structure SortColumn
        Dim ColumnIndex As Integer
        Dim ColumnName As String
        Dim SortOrder As Integer

        Public Sub New(ByVal index As Integer, ByVal name As String, ByVal order As Integer)
            ColumnIndex = index
            ColumnName = name
            SortOrder = order
        End Sub
    End Structure

    Private lstColumns As New List(Of SortColumn)

    Public Sub New()
        lstColumns.Add(New SortColumn(0, "a", 1))
        lstColumns.Add(New SortColumn(2, "c", 3))
        lstColumns.Add(New SortColumn(1, "b", 2))
    End Sub

    Public ReadOnly Property Count()
        Get
            Return lstColumns.Count
        End Get
    End Property

    Public Shared Sub Main()
        Dim prg As New Program()
        Console.WriteLine("Found {0} items in collection", prg.Count)
    End Sub

End Class

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
ik ben ondertussen tijd, kan het helaas nu niet proberen.
Ik ga er morgen weer mee aan de slag.

Heb van alles geprobeerd maar niets leek te werken. Nu gebruik ik 'tijdelijk' een collection ipv een Generic List.

Het hoort gewoon te werken. Ik heb het meerdere malen toegepast in andere projecten, maar ik kan geen verschil ontdekken. Zowel in het type project niet als in de daadwerkelijke code.

Voor nu bedankt. Morgenvroeg ga ik er weer mee aan de slag.

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09 20:58

Ruudjah

2022

DIT BERICHT IS PREVENTIEF VERWIJDERD DOOR DE GEBRUIKER

[ Voor 131% gewijzigd door Ruudjah op 01-12-2009 22:14 ]

TweakBlog


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Staan er beide in :)

Als ik
code:
1
private lstStrings as new list(of String)

heb ik geen enkel probleem (zie startpost :))

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Ruudjah schreef op dinsdag 27 november 2007 @ 18:18:
using System.Componentmodel? of
using System.Collections.Generic?
Mocht dat er niet in staan, dan krijg je een compiler error, en geen runtime exception.

Ben je echter wel zeker dat de exceptie optreedt door je declaratie van die list ?

Is dit in een webproject of in winforms project ?
Heb je option strict aan staan ?

[ Voor 10% gewijzigd door whoami op 27-11-2007 20:40 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Winforms, option strict staat aan.

Exception treedt op wanneer ik wat met die lijst wil doen. Op dat moment is er nog niets gedaan met die lijst op die declaratie na.

Als ik er een lstStrings as list(of String) naast zet. En daar tijdens runtime met mijn muis boven ga hangen krijg ik geen exception te zien in die 'tooltip'. Dan krijg ik te zien: 'count = 0'.

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Ik zou eens die obj folders verwijderen, temp directories leegmaken, en rebuilden ....

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
whoami schreef op dinsdag 27 november 2007 @ 21:50:
Ik zou eens die obj folders verwijderen, temp directories leegmaken, en rebuilden ....
Ik zal het ff proberen morgen.

Bedankt voor het meedenken.

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
whoami schreef op dinsdag 27 november 2007 @ 21:50:
Ik zou eens die obj folders verwijderen, temp directories leegmaken, en rebuilden ....
Zojuist even geprobeerd, maar het maakt niets uit :(
Niemand_Anders schreef op dinsdag 27 november 2007 @ 15:12:
Maak van dim eens public. Volgens mij staat dim gelijk aan private en dus heb je voor 'List' een lege structure..
Visual Basic:
1
2
3
4
Public Structure SortColumn
  Public ColumnIndex as Integer
  ..
end structure
Ook dit maakt geen verschil. Maar dat lag ook niet in de lijn der verwachting eerlijk gezegd.

[ Voor 46% gewijzigd door Rhapsody op 28-11-2007 07:41 ]

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • Ashtaroth
  • Registratie: December 2003
  • Laatst online: 25-09-2019
Moet je niet eerst je struct definieren alvorens je 'em gebruikt? Of blaat ik nu maar wat zo op de vroege morgen?

Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
je blaat maar wat :P

Nee, dat heb ik ook geprobeerd. Zou in VB.NET niets uit mogen maken, en dat deed het inderdaad ook niet. :)

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Rhapsody, kun je mijn VB test code eens in jouw omgeving hangen (eventueel in een nieuw project)?
Zet vervolgens een breakpoint op de regel waar Console.Writeline staat. prg.Count zou dan 3 moeten bevatten.

Als dat wel werkt, dus dan zou je naar verschillen in implementatie kunnen zoeken. Werkt het niet, dan wordt het probleem echt wazig.

Succes.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
Als ik je class er gewoon bij zet en die aanroep. (program.main())
dan krijg ik er inderdaad 3 uit.

Doe ik exact hetzelfde in mijn class, krijg ik een exception wanneer ik de count opvraag via het immediate window:
code:
1
2
?lstColumns.Count 
Run-time exception thrown : System.ArgumentException - Cannot find the method on the object instance.

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Het zou mij eigenlijk helemaal niet verbazen als je een nieuw project (of code in een nieuwe class zet) aanmaakt en code erin copy/paste.
Dat het dan ineens wel werkt.

Blijft toch een vaag probleem :/

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 23:52

Rhapsody

In Metal We Trust

Topicstarter
YakuzA schreef op woensdag 28 november 2007 @ 10:56:
Het zou mij eigenlijk helemaal niet verbazen als je een nieuw project (of code in een nieuwe class zet) aanmaakt en code erin copy/paste.
Dat het dan ineens wel werkt.

Blijft toch een vaag probleem :/
Dat wilde ik inderdaad nog even proberen. Was er tot nu toe even bij ingeschoten, bedankt voor de herinnering!

Net even geprobeerd en inderdaad, in een nieuw project werkt het wel.

Ik heb het idee dat het een bug is binnen Visual Studio/compiler ofzo... maar ja aan de andere kant lijkt me dat ook weer ongeloofwaardig.

[ Voor 12% gewijzigd door Rhapsody op 28-11-2007 11:30 ]

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 09:31
Rhapsody schreef op woensdag 28 november 2007 @ 11:29:
Ik heb het idee dat het een bug is binnen Visual Studio/compiler ofzo... maar ja aan de andere kant lijkt me dat ook weer ongeloofwaardig.
Geloof me, die zitten er zat in. :X

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09 20:58

Ruudjah

2022

DIT BERICHT IS PREVENTIEF VERWIJDERD DOOR DE GEBRUIKER

[ Voor 94% gewijzigd door Ruudjah op 01-12-2009 22:14 ]

TweakBlog

Pagina: 1