Array mit textlichen Index
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
-
Dafür kann man doch ein Dictionary nehmen:
Dim dictionary As New Dictionary(Of String, Integer)
Antivirus 2.0: Der perfekte Schutz gegen Malware > Weitere Informationen
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten? -
jan99 schrieb:
mit Indizies die aus Buchstaben dürfenDim Otto As Integer = 15
meinst, muss das "otto" in Apostrophen stehen, also ein String sein:MeinArray("Otto") = 47
.
Das geht, wie @slice sagt, bei einem Dictionary, und das sieht dann so aus:
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Moin !
vielen Dank für Eure Informationen.
Ich habe das jetzt einmal umgesetzt - bekomme aber im Editor einen Hinweis auf mögliche Laufzeitfehler wegen einer 'spät gebundenen Auflösung' !
VB.NET-Quellcode
- Imports Microsoft.VisualBasic
- Public Class frm_BearbeitenSiel_Digitalisieren
- Private _Old_Osmode As Integer
- Dim _Document As Autodesk.Map.IM.Forms.Document
- Dim _Properties As New EBL.Bearbeiten.Siel.Properties
- Dim _dctFeatures = New Dictionary(Of String, Integer)
- ....
- Private Sub frm_BearbeitenSiel_Digitalisieren_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim _Old_Osmode As Integer = CInt(Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("OSMODE"))
- ' Befüllen der Listen
- InitTabx(0, lb_Schächte)
- InitTabx(1, lb_Elemente)
- Dim ListOfFeature() As String = _Properties.GetFeatureTabellen(200)
- For Each FeatureTabelle As String In ListOfFeature
- _dctFeatures.Add(FeatureTabelle, 0)
- Next
Hätte ich das anders schreiben müssen oder ist diese Meldung zu vernachlässigen ?
Gruß Jan -
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
jan99 schrieb:
bekomme aber im Editor einen Hinweis auf mögliche Laufzeitfehler wegen einer 'spät gebundenen Auflösung' !
Komisch - eiglcih solltest du für sowas einen Compiler-Fehler bekommen, keinen Hinweis.
Hast du Strict Off? -
Das mit dem Textbasiertem Index kannst du schön über Properties lösen. Ich hab da mal kurzt im Object-Brower nachgeschaut und hab da dann in Cotrol-Klasse die ControlCollection-Klasse gefunden. Die macht das ganze wie gesagt über Properties:
Hier das ganze mal anhand von Car und CarCollection in VB.NET und C#
VB.NET-Code
VB.NET-Quellcode
- Imports System.Linq
- Imports System.Windows.Forms
- Imports System.Collections.Generic
- Module Module1
- Sub Main()
- End Sub
- Public Class Car
- Public Property Name As String
- Public Property Marke As String
- Public Property Person As Integer
- Public Overrides Function ToString() As String
- Return String.Format("[Name={0}, Marke={1}, Insassen={2}", Me.Name, Me.Marke, Me.Person)
- End Function
- End Class
- Public Class CarCollection
- Private carList As List(Of Car)
- Public Sub New()
- Me.carList = New List(Of Car)()
- End Sub
- Public Sub Add(c As Car)
- Me.carList.Add(c)
- End Sub
- Public Sub Remove(c As Car)
- Me.carList.Remove(c)
- End Sub
- Public Sub Remove(index As Integer)
- Me.carList.RemoveAt(index)
- End Sub
- Default Public Property Car(carName As String) As Car 'Default macht es Indexierbar
- Get
- Return Me.carList.Find(Function(x)
- Return x.Name = carName
- End Function)
- End Get
- Set(value As Car)
- Dim car = Me.carList.Find(Function(x)
- Return x.Name = carName
- End Function)
- Dim index = Me.carList.IndexOf(car)
- Me.carList(index) = value
- End Set
- End Property
- Default Public Property Car(index As Integer) As Car
- Get
- Return Me.carList(index)
- End Get
- Set(value As Car)
- Me.carList(index) = value
- End Set
- End Property
- End Class
- End Module
C#-Code C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace IndexerTest1
- {
- class Program
- {
- static void Main(string[] args)
- {
- CarCollection cl = new CarCollection();
- cl.add(new Car() { Name = "VW Diesel", Marke = "VW", Person = 5 });
- cl.add(new Car() { Name = "Ford Fiesta", Marke = "Ford", Person = 5 });
- cl.add(new Car() { Name = "Mercedes A-Klasse", Marke = "Mercedes", Person = 5 });
- cl.add(new Car() { Name = "Mini Cooper", Marke = "Mini", Person = 2 });
- cl.add(new Car() { Name = "Jeep Renegade", Marke = "Jeep", Person = 4 });
- cl.add(new Car() { Name = "Ferrair A380", Marke = "Ferrari", Person = 2 });
- cl.add(new Car() { Name = "Honda Civic", Marke = "Honda", Person = 6 });
- Car c1 = cl["VW Diesel"];
- Console.WriteLine(c1.ToString());
- Car c2 = cl[5];
- Console.WriteLine(c2.ToString());
- cl.Remove(c1);
- cl.Remove(cl[1]);
- cl.Remove(cl["Ferrari A380"]);
- Console.ReadKey();
- }
- }
- public class Car
- {
- public string Name { get; set; }
- public string Marke { get; set; }
- public int Person { get; set; }
- public override string ToString()
- {
- return string.Format("[Name={0}, Marke={1}, Insassen={2}]", this.Name, this.Marke, this.Person);
- }
- }
- public class CarCollection
- {
- private List<Car> carList;
- public CarCollection()
- {
- this.carList = new List<Car>();
- }
- public void add(Car c)
- {
- this.carList.Add(c);
- }
- public void Remove(Car c)
- {
- this.carList.Remove(c);
- }
- public void Remove(int index)
- {
- this.carList.RemoveAt(index);
- }
- public Car this[int index]
- {
- get
- {
- return this.carList[index];
- }
- set
- {
- this.carList[index] = value;
- }
- }
- public Car this[string carName]
- {
- get
- {
- return this.carList.Find((x) => x.Name == carName);
- }
- set
- {
- Car c = this.carList.Find((x) => x.Name == carName);
- int index = this.carList.IndexOf(c);
- this.carList[index] = value;
- }
- }
- }
- }
Das ganze kann man dann auch noch schön mit <T> oder (Of T) generisch machen ;D
Lg RadinatorIn general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam HarwellDieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Radinator“ ()
-
-
jan99 schrieb:
Die Fehlermeldung bekomme ich in Zeile 30.
kann nicht sein, oder dein Compiler speinnt, oder du zeigst uns falschen Code.
Und nochmal Frage: Hast du Option Strict Off?
-
-
Es muss On.
Die Voreinstellungen sind verheerend, weil sie machen vb.net zu einer halb-OOP-Hybride-Missbildung
Visual Studio - Empfohlene Einstellungen
-
Moin !
habe das in allen Projekten (hoffentlich) umgestellt.
Dafür steht jetzt in Zeile 30
Die Anmerkung
Fehler 36 "Option Strict On" lässt spätes Binden nicht zu. X:\VB_NET_2015\Projects\tappenbeckja\EBL.Bearbeiten.Siel\EBL.Bearbeiten.Siel\frm_BearbeitenSiel_Digitalisieren.vb 33 13 EBL.Bearbeiten.Siel
Damit werden jetzt aber richtig Fehler gelistet - erkaufe ich mir damit nicht schlechteres ?
Gruß Jan -
nein - verwechsel nicht Fehlermeldungen mit Fehlern.
Die Fehlermeldungen sind deine Freunde.
Ohne Fehlermeldungen kannst du die Fehler nicht beseitigen.
Aber wie gesagt - du präsentierst uns iwie falschen Code.
Denn solches habichjetzt ausprobiert:VB.NET-Quellcode
- Dim _dctFeatures As New Dictionary(Of String, Integer)
- Private Sub frm_BearbeitenSiel_Digitalisieren_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim ListOfFeature() As String '= _Properties.GetFeatureTabellen(200)
- For Each FeatureTabelle As String In ListOfFeature
- _dctFeatures.Add(FeatureTabelle, 0)
- Next
- End Sub
-
-
-
Bingo - da gab es jetzt eine Fehlermeldung und damit war die zweite behoben!
Woher wußtest Du ? Grinzzzz !
Habe dann aber noch eine Frage in Zusammenhang mit der Optionsumstellung.
VB.NET-Quellcode
- Public Function GetFeatureTabellen(ByVal MaxIdx As Integer) As Array
- Dim CollectionTabelleName As String = "|"
- Dim TabelleName As String
- For Idx As Integer = 1 To MaxIdx
- TabelleName = GetManholeTabelle(Idx)
- CollectionTabelleName = CheckFeatureTabellenName(TabelleName, CollectionTabelleName)
- TabelleName = GetCoverTabelle(Idx)
- CollectionTabelleName = CheckFeatureTabellenName(TabelleName, CollectionTabelleName)
- TabelleName = GetDivElementTabelle(Idx)
- CollectionTabelleName = CheckFeatureTabellenName(TabelleName, CollectionTabelleName)
- Next
- Dim ListOfTabellen() As String = CollectionTabelleName.Split({"|"}, StringSplitOptions.RemoveEmptyEntries)
- Return ListOfTabellen
- End Function
Die Einbindung der Funktion, mit dem Array als Rückgabe, habe ich mir aber so aus dem Web gesucht. Föllig falsch ?
gruß Jan -
naja, hat einer gecodet, der keine Ahnung von Datentypen hat.
Die Methode ist mit Rückgabe-DatentypArray
deklariert (zeile #1), aber was tatsächlich mit der Return-Anweisung zurückgegeben wird - welchen Datentyp hat das? (zeile #17).
Hilfestellung: Video-Tut: Welchen Datentyp hat das Objekt?
Dann deklarirere den Rückgabewert richtig, also entsprechend dem, was auch tatsächlich returnt wird, und auf einmal wird alles gut.
(Du merkst: Sobald du Strict On machst, fängst du an, Datentypen zu unterscheiden, was zuvor für dich nur ein einziger Brei war.)
-
Ähnliche Themen
-
Fehler - keine ahnung warum :S
ILoveLisa - - Sonstige Problemstellungen
-
6 Benutzer haben hier geschrieben
- jan99 (7)
- ErfinderDesRades (6)
- RodFromGermany (2)
- Trade (1)
- slice (1)
- Radinator (1)