[C#] Array größe zur laufzeit bestimmen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von NakedLunch, 13. September 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 13. September 2012
    Array größe zur laufzeit bestimmen

    Moin moin,
    ich bastel grade ein wenig mit c# rum und wollte mir nen Programm basteln in dem ich mir Internetaddressen mitsamt einer Beschreibung speichern und später wieder auslesen will. Das Problem ist jedoch das ich vorher nicht weiß wie viele Einträge der User macht. Deswegen soll das Array dynamisch vergrößert werden. Vllt werft ihr mal nen Blick auf den Code.

    Code:
    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    
    class Fav {
     private string name;
     private Uri url;
    
     public Fav (string name, Uri url) {
     this.name = name;
     this.url = url;
     }
    
     public void Open() {
     Process.Start(url.ToString());
     }
    
    }
    
    
    
    
     class Program
     {
    
     static void Main(string[] args)
     {
    
     #region Init
    
     string Descr;
     string url3;
     string tmptrigger;
     bool Trigger = true;
     bool Trigger2 = true;
     string[,] mArray = new string[255,2];
     int sele = 0;
     
    
     #endregion
    
     #region IO
     
    
     for (int y = 0; y == 0; )
     #region DescrEinlesen
     {
    
     if (File.Exists("Descr.txt"))
     {
     using (StreamReader sr = new StreamReader("Descr.txt"))
     {
     int k = 0;
     while (!sr.EndOfStream)
     {
     string line = sr.ReadLine();
     mArray[k, 0] = line;
     k++;
     }
     
     }
    
     // Array Test
    
     //for (int i=0; i < 10; i++) {
     // Console.Out.WriteLine(mArray[i,0]);
     //}
     //Console.In.ReadLine();
    
    
     break;
    
     }
    
     else
     {
     File.Create("Descr.txt");
     }
     #endregion
    
     #region UrlEinlesen
    
     if (File.Exists("Url.txt"))
     {
     using (StreamReader sr2 = new StreamReader("Url.txt"))
     {
     int k = 0;
     while (!sr2.EndOfStream)
     {
     string line = sr2.ReadLine();
     mArray[k, 1] = line;
     k++;
     }
     sr2.Close();
     }
    
     break;
     }
    
     else
     {
     File.Create("Url.txt");
     }
     #endregion
     }
     #endregion
    
    
    
     while (sele != 3)
     {
    
    
     #region Selection
     while (Trigger2 == true)
     {
     Console.Clear();
     Console.Out.WriteLine("Select :\n\n 1: Eingabe \n 2: Ausgabe \n 3: Ende");
     tmptrigger = Console.In.ReadLine();
     try
     {
     sele = short.Parse(tmptrigger);
     }
     catch
     {
     Trigger2 = true;
     }
    
     Console.Clear();
    
     if (sele == 1 || sele == 2)
     {
     Trigger2 = false;
     }
     else
     {
     Console.Out.WriteLine("Bitte Option 1, 2 oder 3 wählen");
     }
    
     if (sele == 3)
     Trigger2 = false;
    
     }
     #endregion
    
    
    
     #region Eingabe
    
     while (sele == 1)
     {
    
     for (int i = 0; Trigger == true; i++)
     {
    
     Console.Out.WriteLine("Bitte Beschreibung des Links eingeben: ");
     Descr = Console.In.ReadLine();
     mArray[i, 0] = Descr;
     Console.Out.WriteLine("Bitte die Url eingeben: ");
     url3 = Console.In.ReadLine();
     mArray[i, 1] = url3;
    
    
     #region try catch uri
    
     try
     {
     var url2 = new Uri(mArray[i, 1]);
     }
    
     catch
     {
     Console.Out.WriteLine("Bitte Url im Format 'http://www.example.com' eingeben\n");
     i--;
     Trigger = false;
     Trigger2 = true;
     sele = 0;
     }
     #endregion
    
    
     }
    
    
     }
     #endregion
    
    
    
     #region Ausgabe
     while (sele == 2)
     {
     var k = mArray.GetLength(0);
     Console.Out.Write(k);
     Console.In.ReadLine();
    
     for (int j = 0; j < k; j++)
     {
     Console.Out.WriteLine("{0}: Besch: {1} URL: {2}\n", j + 1, mArray[j, 0], mArray[j, 1]);
     }
     sele = 0;
     Trigger2 = true;
     }
     #endregion
    
     }
    
     }
     
     
     }
    
    
    grüße
     
  2. 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    Wieso verwendest du keine Lists für diesen Anlass?
    Diese werden intern wie Arrays behandelt (und man kann auch so mit ihnen arbeiten) und sind dynamisch erweiterbar...

    List<String> sl = new List<string>();
    sl.Add("Yay");
    sl[sl.Count - 1] // "Yay";
     
    1 Person gefällt das.
  3. 13. September 2012
    Zuletzt bearbeitet: 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    bin ich leider noch nicht drüber gestolpert ich hab erst gestern abend mit c# angefangen aber ich werde das mal googlen danke

    Edit:
    Wie benutze ich denn in dieser Liste wenn ich ne liste mit 2 Feldern haben will.
    Zbsp. Name Nachname Alter ?

    sry bin noch nen ziemlicher noob
     
  4. 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    Wenn du mehrere Felder in den Einträgen der Liste speichern möchtest, kannst du das Ganze mit einem struct machen. In dem struct speicherst du die verschiedenen Daten und fügst es der Liste hinzu.

    Als Beispiel

    public struct Person
    {
    public string vorname;
    public string nachname;
    public int alter;
    }


    List<Person> Liste = new List<Person>();

    Person neuePerson;
    neuePerson.nachname = "Mueller";
    neuePerson.vorname = "Hans";
    neuePerson.alter = 48;

    Liste.Add(neuePerson);
     
    1 Person gefällt das.
  5. 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    hmm das klappt irgendwie auch nicht wie geplant

    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
     public struct Fav
     {
     public string descr;
     public string url;
     }
     
    
    
     class Program
     {
     static void Main(string[] args)
     {
     Fav fav = new Fav();
     List<Fav> myFav = new List<Fav>();
     for (int i=0; i < 5; i++)
     {
     
     fav.descr = Console.ReadLine();
     fav.url = Console.ReadLine();
     myFav.Add(fav);
    
     }
     for (int i = 0; i < 5; i++)
     {
     Console.WriteLine(myFav[i]);
     }
     Console.ReadLine();
    
     }
     }
    }
    
    Die ausgabe sieht auch etwas seltsam aus..... oder muss ich für jedes Listenelement ein neues Fav konstruieren ?
     
  6. 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    Du versuchst nun das ganze struct auszugeben, du musst auf die einzelnen Felder zurückgreifen wie beim speichern.

    Also:
    for (int i = 0; i < 3; i++)
    {
    Console.WriteLine(myFav.descr);
    Console.WriteLine(myFav.url);
    }
     
  7. 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    Eine Case Abfrage, um die for Schleife zu vernichten.

    Und dann ne Liste.
    Du kannst den String auch ggf. größt möglich angeben, was aber heißt, dass du irgendwann ein Ende hast.
     
    1 Person gefällt das.
  8. 13. September 2012
    AW: Array größe zur laufzeit bestimmen

    Wunderbar ich glaub das war genau das was ich geesucht hatte. Danke MSK
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.