458 Stimmen

Wie kann ich ein leeres Array in C# initialisieren?

Ist es möglich, ein leeres Array ohne Angabe der Größe zu erstellen?

Zum Beispiel habe ich erstellt:

String[] a = new String[5];

Können wir das obige String-Array auch ohne die Größe erstellen?

544voto

Oded Punkte 475566

Wenn Sie eine Sammlung verwenden wollen, deren Größe Sie nicht im Voraus kennen, gibt es bessere Optionen als Arrays.

Verwenden Sie eine List<string> stattdessen - damit können Sie so viele Elemente hinzufügen, wie Sie brauchen, und wenn Sie ein Array zurückgeben müssen, rufen Sie ToArray() auf die Variable.

var listOfStrings = new List<string>();

// do stuff...

string[] arrayOfStrings = listOfStrings.ToArray();

Wenn Sie debe ein leeres Array erstellen, können Sie dies tun:

string[] emptyStringArray = new string[0];

251voto

Kobi Punkte 129985

In .NET 4.6 ist der bevorzugte Weg, eine neue Methode zu verwenden, Array.Empty :

String[] a = Array.Empty<string>();

En Umsetzung ist kurz und bündig und verwendet wie sich statische Mitglieder in generischen Klassen in .Net verhalten :

public static T[] Empty<T>()
{
    return EmptyArray<T>.Value;
}

// Useful in number of places that return an empty byte array to avoid
// unnecessary memory allocation.
internal static class EmptyArray<T>
{
    public static readonly T[] Value = new T[0];
}

(vertragsbezogener Code aus Gründen der Übersichtlichkeit entfernt)

Siehe auch:

219voto

hemant Punkte 2335

Versuchen Sie dies:

string[] a = new string[] { };

39voto

MatthiasG Punkte 4314

Sie könnten es mit einer Größe von 0 initialisieren, aber Sie müssen es neu initialisieren, wenn Sie die Größe kennen, da Sie nicht an das Array anhängen können.

string[] a = new string[0];

11voto

nawfal Punkte 65966

Es hat wenig Sinn, ein Array ohne Größe zu deklarieren. Ein Array geht es um Größe . Wenn Sie ein Array mit einer bestimmten Größe deklarieren, geben Sie die feste Anzahl der verfügbaren Slots in einer Sammlung an, die Dinge aufnehmen können, und entsprechend wird Speicher zugewiesen. Um etwas hinzuzufügen, müssen Sie das bestehende Array ohnehin neu initialisieren (auch wenn Sie die Größe des Arrays ändern), siehe diesen Thread ). Einer der seltenen Fälle, in denen man ein leeres Array initialisieren möchte, wäre die Übergabe von array als Argument.

Wenn Sie eine Sammlung definieren wollen, von der Sie nicht wissen, wie groß sie möglicherweise sein könnte, ist Array nicht Ihre Wahl, sondern etwas wie ein List<T> oder ähnlich.

Die einzige Möglichkeit, ein Array ohne Angabe der Größe zu deklarieren, ist ein leeres Array von Größe 0 . hemant y Alex Dn bietet zwei Möglichkeiten. Eine andere, einfachere Alternative ist, einfach :

string[] a = { };

[ Die Elemente innerhalb der Klammer sollten z.B. implizit in den definierten Typ konvertierbar sein, string[] a = { "a", "b" }; ]

Oder eine andere:

var a = Enumerable.Empty<string>().ToArray();

Hier ist ein deklarativerer Weg :

public static class Array<T>
{
    public static T[] Empty()
    {
        return Empty(0);
    }

    public static T[] Empty(int size)
    {
        return new T[size];
    }
}

Jetzt können Sie anrufen:

var a = Array<string>.Empty();

//or

var a = Array<string>.Empty(5);

CodeJaeger.com

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.

Powered by:

X