myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » String Array in einer Klasse
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

String Array in einer Klasse

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Krumnix
myCSharp.de-Mitglied

Dabei seit: 16.03.2018
Beiträge: 71
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Schweiz


Krumnix ist offline

String Array in einer Klasse

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo.

Ich möchte gerne in einer Klasse eine String Array erweitern, bzw. initialisieren.

Beispiel:

C#-Code:
public class CSVImport
    {
        public string[] NumberInCSV { get; set; }

        public static CSVImport ReadCSV(string FileName)
        {
            var data = new CSVImport();
            string CSVLine;

            if (File.Exists(FileName))
            {
                int CSVLineCount = 0;
                StreamReader sr = new StreamReader(FileName, Encoding.Default);
                while ((CSVLine = sr.ReadLine()) != null)
                {
                    if (CSVLineCount > 0)
                    {
                        string[] m_ContainerSpalte;
                        m_ContainerSpalte = CSVLine.Split(new char[] { ',' });
                        data.NumberInCSV[CSVLineCount +1] = m_ContainerSpalte[0];
                    }
                    CSVLineCount++;
                }
                return data;
            }
            else
            {
                MessageBox.Show("Die angewählte CSV-Datei wurde nicht gefunden!", CSV-Datei nicht gefunden!");
                return data;
            }
        }
    }

NummerInCSV soll dann später ausserhalb der Klasse sowie in der Klasse weiter genutzt werden können.
Auch möchte ich über eine Vererbung erreichen, dass ich NummerInCSV nutzen kann.

Leider weiß ich aktuell noch nicht, wie ich, ohne zu wissen, wie "groß" die CSV-Datei ist, NummerInCSV korrekt zu initialisieren.
Ich habe logischerweise immer eine NULL Exception.

Gibs noch einen andere Möglichkeit oder einen anderen Weg?

Danke!

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Krumnix am 14.02.2019 16:36.

14.02.2019 16:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.166
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Auch hier gilt:  [Artikel] Drei-Schichten-Architektur
Du mischt so alles, was man nur mischen kann ;-)

Vererbung ist der absolut falsche Weg.
Saubere Trennung wäre der richtige Weg.
14.02.2019 16:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.387
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum keine

C#-Code:
(I)List<string>

?
14.02.2019 16:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Krumnix
myCSharp.de-Mitglied

Dabei seit: 16.03.2018
Beiträge: 71
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Schweiz

Themenstarter Thema begonnen von Krumnix

Krumnix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
Warum keine

C#-Code:
(I)List<string>

?

Weil hier das gleiche Problem vorliegt :)
NullReferenceException.

Der Constructor weiß ja beim Aufruf der Class noch nicht, wie groß das Array sein soll und wie es initialisiert werden soll.
Das fehlt mir hier.
Dabei ist es egal ob es ein String-Array oder eine List of String ist.

Ich möchte ja ungern von außen schon Vorbereitung treffen, um diese der Klasse mitzuteilen. Die Klasse sollte soweit selbst sich alles hernehmen und mir dann das gewünschte Ergebnis liefern. Das wäre hier mein Ziel :)

@Abt: Vererbung ist nun bissel klarer. Lasse ich erstmal außen vor. Das war wohl ein wenig zu voreilig.
15.02.2019 08:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.387
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sorry, aber da scheinen dir einige Grundlagen zu fehlen.
Eine List<T> vergrößert sich automatisch bei Bedarf. Sie muß nur, wie jedes andere Objekt auch, einmalig erzeugt werden.
Also ausgehend von

C#-Code:
public List<string> NumberInCSV { get; private set; }

im Konstruktor

C#-Code:
NumberInCSV = new List<string>();

oder aber (ab neueren C#-Versionen)

C#-Code:
public List<string> NumberInCSV { get; private set; } = new List<string>();

Und dann die Elemente mittels Add(...) hinzufügen (nicht über den Index-Operator, da du sonst eine IndexOutOfRangeException erhältst).

PS: private set extra, damit nicht von außerhalb jemand die ganze Liste wieder neu erzeugen kann (oder sogar auf null setzt)!

Persönlich würde ich sogar eine IList<T> bzw. IReadOnlyList<T> als Schnittstelle bevorzugen.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Th69 am 15.02.2019 09:34.

15.02.2019 09:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Krumnix
myCSharp.de-Mitglied

Dabei seit: 16.03.2018
Beiträge: 71
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Schweiz

Themenstarter Thema begonnen von Krumnix

Krumnix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
oder aber (ab neueren C#-Versionen)

C#-Code:
public List<string> NumberInCSV { get; private set; } = new List<string>();

Nein, das mit dem Add hab ich drin. Ich hab in dem Fall alles mal ausprobiert.

Aber deine Zeile da oben war die Lösung.
Vielen Dank.

In Sachen Klassen habe ich zwar schon viel gelesen, aber in der Praxis sieht man manchmal vor lauter Buchstaben die Lösung nicht.

Funktioniert!
15.02.2019 09:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Monate.
Der letzte Beitrag ist älter als 8 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 04:09