| |
VB.NET - Ein- und Umsteigercollection - was ist falsch | | | Autor: mikeb69 | Datum: 17.10.06 21:26 |
| hallo,
hab mal wieder ein verständnisproblem
'aufbau der elemente eines frage-antwort paares in der datenbank
Private Structure strDBItem
Private bFlag As Boolean
Shared sQuestion As String
Shared sAnswer As String
Shared iLengthOfAnswer As Integer
End Structure
'die datenbank als collection
Private colDBItems As Collection 'the database itself
Public Function AddNewDBItem(ByVal sQuestion As String, ByVal sAnswer As _
String) As Boolean
strDBItem.sQuestion = sQuestion
strDBItem.sAnswer = sAnswer
strDBItem.iLengthOfAnswer = sAnswer.Length
colDBItems.Add(strDBItem)
End Function bei
d(strDBItem)
/code]
gibt es einen fehler:
is a type and can not be used as an expression !!!!!
ich möchte die ganze struktur als collection element hinzufügen
was mache ich falsch ?
danke
mikeb69 | |
Re: collection - was ist falsch | | | Autor: DaveS (Moderator) | Datum: 18.10.06 08:56 |
| Erstens hast du die Variablen als Shared deklariert. Das bedeutet, es gibt nur eine einzelne Instanz davon im ganzen Programm, und diese Instanz gehört der Klasse strDBItem. Du solltest deine Structure deswegen so deklarieren:
Private Structure strDBItem
Public bFlag As Boolean
Public sQuestion As String
Public sAnswer As String
Public iLengthOfAnswer As Integer
End Structure (Was du mit bFlag machen willst weiss ich nicht, aber als Private kannst du das gar nicht benutzen, wie die Structiure jetzt deklariert ist).
Den Code musst du entsprechend auch ändern und eine Instanz von strDBItem verwenden:
Public Function AddNewDBItem(ByVal sQuestion As String, ByVal sAnswer As _
String) As Boolean
Dim dbi As strDBItem
dbi.sQuestion = sQuestion
dbi.sAnswer = sAnswer
dbi.iLengthOfAnswer = sAnswer.Length
colDBItems.Add(dbi)
End Function Drittens mit VB.Net solltest du Collection besser nicht benutzen, es gibt bessere Framework Klassen, und mit VB2005 kannst du die generischen Collections benutzen, die wesentlcih effizienter sind (u.a.) wenn es um Werte wie Structures geht:
Private colDBItems As New List(Of strDBItem) (Und du brauchst eventuell "New" auch in deinem Code).
________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: collection - was ist falsch | | | Autor: mikeb69 | Datum: 18.10.06 19:18 |
| hallo daves,
danke für deine hilfe - ich stand gestern abend echt auf dem schlauch !!!!
bin heute in der arbeit draufgekommen. (beim nebenbei nachdenken)
du hast recht die boolsche variable macht keinen sinn - vb wollte aber das ich eine nicht shared variable in der struktur habe. deshalb hab ich sie eingeführt.
habs jetzt wie folgt gemacht:
'aufbau der elemente eines frage-antwort paares in der datenbank
Private Structure strDBItem
Public sQuestion As String
Public sAnswer As String
Public iLengthOfAnswer As Integer
End Structure
'die datenbank als collection
Private colDBItems As New Collections.Generic.List(Of strDBItem) 'the
' database itself was mich jedoch noch stutzig macht ist folgendes
so funktioniert es - ich will aber eine List(Of strDBItem) als value haben.
nur dann meckert vb
Public Property Item(ByVal iPosInDB As Integer) As List(Of String)
Get
Dim s As New List(Of String)
s.Add(colDBItems.Item(iPosInDB).sQuestion)
s.Add(colDBItems.Item(iPosInDB).sAnswer)
s.Add(colDBItems.Item(iPosInDB).iLengthOfAnswer.ToString)
Return s
End Get
Set(ByVal value As List(Of String))
Dim s As New strDBItem
s.sQuestion = value.Item(0)
s.sAnswer = value.Item(1)
s.iLengthOfAnswer = CInt(value.Item(2))
colDBItems.Item(iPosInDB) = s
End Set
End Property hier kommt das gemeckere - warum ?
hab doch colDBItem als List(Of strDBItem) declariert
Public Property Item(ByVal iPosInDB As Integer) As List(Of strDBItem)
Get
Dim s As New List(Of strDBItem)
s = colDBItems.Item(iPosInDB) <- das hier ist falsch
Return s
End Get wäre nett wenn mir das einer erklären kann
danke
mikeb69 | |
Re: collection - was ist falsch | | | Autor: mikeb69 | Datum: 18.10.06 19:53 |
| hallo daves
eigentlich will ich nur eines der vielen
strDBItem's
aus der
colDBItems
zurückgeben. wenn ich aber
Public Property Item(ByVal iPosInDB As Integer) As strDBItem schreibe gibt es einen fehler
"item can not expose type strDBItem in namespace xxx through class clsDB
gruss
mikeb69 | |
Re: collection - was ist falsch | | | Autor: mikeb69 | Datum: 18.10.06 20:14 |
| hallo daves
aber dann kann ich ja von außen direkt auf die struktur zugreifen.
eigentlich wollte ich alle "variablen" private lassen.
aber gut
danke für den tip
mikeb69 | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|