Wie man neues Element in bestehenden String-Array in C#.net hinzufügen?
Ich muss die vorhandenen Daten erhalten.
Wie man neues Element in bestehenden String-Array in C#.net hinzufügen?
Ich muss die vorhandenen Daten erhalten.
LINQ verwenden:
arr = (arr ?? Enumerable.Empty<string>()).Concat(new[] { newitem }).ToArray();
Ich verwende dies gerne, da es ein Einzeiler ist und sich sehr gut in eine switch-Anweisung oder eine einfache if-Anweisung einbetten oder als Argument übergeben lässt.
EDIT:
Manche Leute mögen keine new[] { newitem }
weil es ein kleines, temporäres Array mit nur einem Element erstellt. Hier ist eine Version mit Enumerable.Repeat
die keine Erstellung eines Objekts erfordert (zumindest nicht an der Oberfläche - .NET-Iteratoren erstellen wahrscheinlich eine Reihe von Zustandsmaschinenobjekten unter dem Tisch).
arr = (arr ?? Enumerable.Empty<string>()).Concat(Enumerable.Repeat(newitem,1)).ToArray();
Und wenn Sie sicher sind, dass das Feld niemals null
zu beginnen, können Sie es vereinfachen zu:
arr.Concat(Enumerable.Repeat(newitem,1)).ToArray();
Beachten Sie, dass Sie einer geordneten Sammlung Elemente hinzufügen können, List
ist wahrscheinlich die gewünschte Datenstruktur und nicht ein Array, mit dem Sie beginnen.
Eine sehr alte Frage, aber ich wollte sie trotzdem stellen.
Wenn Sie nach einem Einzeiler suchen, können Sie den unten stehenden Code verwenden. Er kombiniert den Listenkonstruktor, der eine Aufzählung akzeptiert, mit der Syntax des Initialisierers "new" (da Frage aufgeworfen).
myArray = new List<string>(myArray) { "add this" }.ToArray();
Arrays in C# sind unveränderlich z.B. string[]
, int[]
. Das bedeutet, dass Sie die Größe nicht ändern können. Sie müssen ein völlig neues Array erstellen.
Hier ist der Code für Array.Resize :
public static void Resize<T>(ref T[] array, int newSize)
{
if (newSize < 0)
{
throw new ArgumentOutOfRangeException("newSize", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
}
T[] sourceArray = array;
if (sourceArray == null)
{
array = new T[newSize];
}
else if (sourceArray.Length != newSize)
{
T[] destinationArray = new T[newSize];
Copy(sourceArray, 0, destinationArray, 0, (sourceArray.Length > newSize) ? newSize : sourceArray.Length);
array = destinationArray;
}
}
Wie Sie sehen können, wird ein neues Array mit der neuen Größe erstellt, der Inhalt des Quell-Arrays kopiert und der Verweis auf das neue Array gesetzt. Der Hinweis hierfür ist die ref Schlüsselwort für den ersten Parameter.
Es gibt Listen, die neue Slots dynamisch zuweisen für neue Artikel. Dies ist z. B. Liste<T> . Diese enthalten unveränderliche Arrays und ändern ihre Größe bei Bedarf (List<T> ist keine Implementierung einer verketteten Liste!). ArrayList ist das Gleiche ohne Generics (mit Objekt Array).
LinkedList<T> ist eine echte Implementierung einer verknüpften Liste. Leider kann man der Liste nur LinkListNode<T> Elemente hinzufügen, so dass man seine eigenen Listenelemente in diesen Knotentyp einpacken muss. Ich denke, seine Verwendung ist unüblich.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.