Laden...

dynamisches Array von der Klassen String

Erstellt von Prozac vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.233 Views
P
Prozac Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren
dynamisches Array von der Klassen String

Hallo,

ich habe bisher noch nichts in c# gemacht, sondern nur in c++ bzw c und bin an meine Klasse so rangegangen, wie ich in C++ rangegangen bin.


class Users
{
private int nr_reg_mail;
private string* reg_mail;
/// Hier kommt der Fehler: Zeiger und Puffer fester Größe können nur in einem unsicheren Kontext verwendet werden

Users()
{
            reg_mail = null;
            nr_reg_mail = 0;
}

private void add_mail(string mail)
{
            nr_reg_mail++;
            reg_mail = new string[nr_reg_mail];
            mail.CopyTo(reg_mail[(nr_reg_mail - 1)]);
}
....weitere Methoden
}

Ich will also ein Array von Strings, dass jeweils erweitert wird, sobald ich eine neue Mailadresse hinzufügen möchte.
Wie kann ich das in C# erreichen?

Vielen Dank,

Prozac

184 Beiträge seit 2005
vor 17 Jahren

Dafür gibt es mehrere Möglichkeiten, ich würde aber sehr die Verwendung von generischen Listen empfehlen.


List<string> StringList = new List<string>();

// in deiner methode
StringList.Add("DeinString");

Gruß
DCoder

P.S.: Für solche Sachen empfielt sich auch immer ein Blick in das Galileo OpenBook zu C# http://www.galileocomputing.de/openbook/visual_csharp/ - kann ich nur wärmstens empfehlen, da viele Grundlagen bzw. praktische Anwendungen gut erklärt werden!

P.P.S.: Um mit List<T> arbeiten zu können musst du den Namespace System.Collections.Generic einbinden!

😁 P.P.P.S.: Bitte Code Tags verwenden 🙂

L
497 Beiträge seit 2006
vor 17 Jahren

Warum die generische Liste? Ich würde einfach ne StringCollection nehmen. Zu finden im Namespace System.Collections.Specialized

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

Gelöschter Account
vor 17 Jahren

ich denke am besten eignet sich ein arraylist das im namespace system.collections zu finden ist.

in diesem kannst du beliebig viele objekte(auch strings) hinzufügen und dynamisch löschen.
zudem kann man es mit integrierten methoden sortieren, durschsuchen, an besimmten stellen hintufügen, usw usw.. das ganze ist recht umfangreich. und wenn du ausschließlich strings reinlädst ist die verwendung umso einfacher --> beim auslesen einfach nur .tostring()

die sache mit den pointern den du in deinem code versuchst kannst du nur mit dem schlüsselwort "unsafe" erreichen aber das ist usicher und bezüglich garbagecollector absolut nicht zu empfehlen (nur gut um andere anwendungen ein wenig zu seinen gunsten zu beeinflussen ^^)

richitge pointer gibt es wie in c++ oder c nicht mehr in c# (um ehrlich zu sein braucht man die auch nciht mehr da c# alle gängigen eventualitäten bereithält)

umgang mit arraylist:

ArrayList arr = new ArrayList();
arr.Add("hallo");
arr.AddRange(stringarray_variable);
foreach(object o in arr)
{
if(o.ToString().ToUpper() == "HALLO") return;
}

nur mal als kleines beispiel...
dannn gibt es noch sort(), remove(), ... schau mal in der intellisence

L
497 Beiträge seit 2006
vor 17 Jahren

Hallo JAck30lena,

also ne ArrayList halte ich nicht für besonders optimal. Wenn man mit C# anfängt und man von der Generics-Syntax verwirrt wird, dann hat sie evtl. eine Berechtigung. Sonst bin ich der Meinung, dass man (unter .NET2.0) möglichst selten die gute alte ArrayList benutzen sollte.
Eine generische Liste hat zum einen der Vorteil, dass sie typsicher ist (d.h. der Compiler meckert, wenn Du etwas anderes als den erwarteten Typ hinzufügen willst) und zum anderen muss keine Konvertierung vorgenommen werden.
Und wenns schnell gehen soll und trotzdem typsicher sein muss, dann - wie gesagt - bei Strings die StringCollection verwenden. Die hat allerdings keine sort-Methode.

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

369 Beiträge seit 2006
vor 17 Jahren

Mmh, von der Performance existiert zwischen StringCollection und List<String> kein wirklicher unterschied...

Gelöschter Account
vor 17 Jahren

hmm.. ja hast recht.. arraylist ist nicht optimal von der performance aber ich nutz die sortierfunktion recht häufig ...

mehr als 100 elemente in der arraylist sind schon zu spüren...

M
1.439 Beiträge seit 2005
vor 17 Jahren

Eine Sortierfunktion hat List<T> auch.

P
Prozac Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren

Hallo,

danke für die Antworten.

Ich habe mein Vorhaben zunächst mir einer ArrayList umgesetzt. Zu generischen Listen habe ich nicht wirklich was gefunden. Ist vielleicht nicht die Ideale Variante, aber es funktioniert immerhin.

Prozac

M
1.439 Beiträge seit 2005
vor 17 Jahren

Solange du nur Referenztypen verwendest, kannst du auch eine ArrayList verwenden.

184 Beiträge seit 2005
vor 17 Jahren

Ich hab neulich mal einen Performance Test bezüglich ArrayList und List<T> gemacht (mit Int32 Werten) -- List<int> war bis zu 10 mal schneller!

ArrayList ist alleine schon aus Gründen der Typensicherheit abzulehnen -- als Lernstütze allerdings sicherlich anwendbar.

In dem Moment wo man sich mit generischen Listen auskennt und z.B. nicht StringCollection als Typ direkt benutzt ist die Array Frage halt gleich für jegliche Typen geklärt - mal abgesehen davon, dass ich ein List<T> nicht sonderlich verwirrend finde 😉

Aber StringCollection geht natürlich genauso - kein Frage, find es halt nur sinnvoller gleich den Umgang mit den generischen Listen zu erlernen, da man immer wieder auf solche Szenarien trifft.

Gruß
DCoder

369 Beiträge seit 2006
vor 17 Jahren

Int32 ist auch ziemlich ungeeignet zum vergleichen, da eine Wertetyp bei der Arraylist zunächst geboxt werden muss, was auch wiederum Zeit kostet. Dennoch kann ich mich dem Ratschlag die generischen Collections zu bevorzugen nur anschließen!

184 Beiträge seit 2005
vor 17 Jahren

Guter Einwand, habe den Performance Test auch mal mit strings und komplexen Typen gemacht -- die Listen sind entweder gleichwertig oder schneller, von daher... 😉