Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Eine List<T> erstellen und sofort mit Werten befüllen
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

Eine List<T> erstellen und sofort mit Werten befüllen

beantworten | zitieren | melden

Hallo,

ich hab da eine Verständnisfrage.

Es wird eine List<string> erstellt, diese mit Werten befüllt. Warum aber ist sie nicht initialiisert, wenn ich folgenden Code benutze ?

 public List<string> GetFileContent(string filename)
{
 string line;
 List<string> returnValue = new List<string>({ "Output Value" });
 System.IO.StreamReader file = new System.IO.StreamReader(filename);
 while ((line = file.ReadLine()) != null)
    {
    returnValue.Add(line);
    }
  return returnValue;
}

setze ich jedoch in der Zeile


List<string> returnValue = new List<string>(new string[] { "Output Value" });

sei sie initialisiert.

Ich verstehe das Prinzip da hinter nicht. Sollte es denn nicht so sein,das ich durch das schlüsselwort new, eine neue List aus Strings erstelle - und diese von haus aus, eigentlich ein array sein sollten ?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Glowhollow am .
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

naja - deine erste Variante passt schlicht zu keinem Konstruktor, den List<T> anbietet.

LG

Edit:
Kannst hier nachlesen:
https://msdn.microsoft.com/de-de/library/6sh2ey19(v=vs.110).aspx

Er will entweder:
a) Gar nichts
b) einen Enumerable des entsprechenden Typs (ein Array ist z.B. ein Enumerable)
c) einen int
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am .
private Nachricht | Beiträge des Benutzers
csharpcoder
myCSharp.de - Member



Dabei seit:
Beiträge: 10
Herkunft: NRW

beantworten | zitieren | melden

Oder du schreibst es so:

List<string> returnValue = new List<string>() { "Output Value", "bla", "blub" };
Stichwort: Auflistungsinitialisierer

PS: Ich würde hier ins Forum nur den unbedingt notwendigen Code posten ;)
Deine Frage bezieht sich nur auf eine einzige Zeile.
Alles andere verwirrt nur.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von csharpcoder am .
private Nachricht | Beiträge des Benutzers
markl
myCSharp.de - Member

Avatar #avatar-4095.gif


Dabei seit:
Beiträge: 77

beantworten | zitieren | melden

Bezüglich:


List<string> returnValue = new List<string>({ "Output Value" });

... was für ein Compiler verwendest du? Das sollte eigentlich nicht mal kompilieren
http://dotnet-paderborn.azurewebsites.net/
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Visual Studio 2017 ?

Ach ja, stimmt, der code sah etwas anders aus, hab das beim editieren, vergessen wieder richtig zu stellen.

ich glaube das war vorher so...


List<string> returnValue = new List<string>{ "Output Value" };
private Nachricht | Beiträge des Benutzers
CoLo
myCSharp.de - Member



Dabei seit:
Beiträge: 232

beantworten | zitieren | melden

Ich vermute mal Du suchst die Split-Funktion.
Diese zerteilt die "Output Value" Zeichenfolge in ein Zeichenfolgenarray.


            string[] returnValue1 = "Output Value".Split(' ');
            List<string> returnValue2 = new List<string>(returnValue1);

            //bzw.
            List<string> returnValue3 = new List<string>("Output Value".Split(' ') );

private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2136

beantworten | zitieren | melden

Eigentlich will er ja nur den einen String in der Liste haben, aber der Fantasie beim Vermuten sind keine Grenzen gesetzt :-)
private Nachricht | Beiträge des Benutzers
csharpcoder
myCSharp.de - Member



Dabei seit:
Beiträge: 10
Herkunft: NRW

beantworten | zitieren | melden

Genau, aber ich vermute mal weiter ^^

Er fragt sich bestimmt, warum das funktioniert:

string[] array = { "Hallo", "cya" };
Aber folgendes nicht:

var list = new List<string>({ "Hallo", "cya" });

Übrigens wäre das noch eine Alternative (nach new lässt sich string weglassen):

var lst = new List<string>(new []{ "Hallo", "cya" });
Aber ich favorisiere immer noch den Auflistungsinitialisierer (s. mein erster Beitrag in diesem Thread).

Syntaktisch ist's halt so, dass folgender Ausdruck nicht lose verwenden werden kann:

{ "Hallo", "cya" };
Man könnte sich fragen warum - das kann ich leider nicht beantworten.
Vielleicht möchten die Sprachdesigner eine Verwechslung mit anonymen Typen vermeiden.

Ich hatte mich seinerzeit auch gefragt, warum das nicht funktionierte:

string Test {get; set;} = ""
Und mit der nächsten C#-Version ging das dann :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von csharpcoder am .
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Huhu, also um das ganze etwas zu entmystifizieren. Der Anwendungsfall ist natürlich deutlich größer.

Unsere Firma, Flowster Solutions, hat eine eigene Automatisierungssoftware, in die man per drag und drop wie in einem flowchart - "Aktivitäten" zusammenstöpseln kann. Das sind dann einzelne kleinere Programme, genauergesagt DLLs auf C# basis.

In meinem Anwendungsfall hatte ich eine Anwendung zu schreiben, mit der man auf einer Remote Maschine ein Python Script ausführen kann und der Output an die Software zurückgegeben wird.

Speziell eine List aus Strings.

Im Prinzip wird Zeile für Zeile des Outputs (stdout, bzw. stderr) - als String der List hinzugefügt.

Warum das so sein soll, ist nicht meine Aufgabe - ich pass das ganze nur an.

Das war nur eine kurze Verständnisfrage, weil ich beim Coden darüber gestolpert bin. Ich bin kein Pro wie Abt, aber bin ja noch dabei...
private Nachricht | Beiträge des Benutzers