651 Stimmen

Ein Konst-Array deklarieren

Ist es möglich, etwas Ähnliches wie das Folgende zu schreiben?

public const string[] Titles = { "German", "Spanish", "Corrects", "Wrongs" };

0 Stimmen

Static verwendet werden könnte, public static string[] Titles = new string[] {"Deutsch", "Spanisch"};

5voto

ALZ Punkte 1937

Für meine Bedürfnisse definiere ich static Array, anstelle von unmöglich const und es funktioniert: public static string[] Titles = { "German", "Spanish", "Corrects", "Wrongs" };

2 Stimmen

Einfaches Entfernen const aus dem OP-Beispiel funktioniert auch, aber das (oder Ihre Antwort) erlaubt es, beides zu ändern: Titles Instanz und einem beliebigen Wert. Was ist also der Sinn dieser Antwort?

0 Stimmen

@Sinatr, ich habe diese Frage vor 3 Jahren beantwortet, als ich anfing, in C# zu arbeiten. Ich habe es verlassen, jetzt bin ich in der Java-Welt. Vielleicht habe ich vergessen, hinzuzufügen readonly

1 Stimmen

Nach reiflicher Überlegung ist Ihre Antwort eine direkte wie man den OP-Code zum Laufen bringt , ohne jegliche const / readonly Überlegungen, einfach damit es funktioniert (z.B. wenn const war ein Syntaxfehler). Für einige Leute scheint es ein wertvoll Antwort (vielleicht haben sie auch versucht, die const versehentlich?).

5voto

tdbeckett Punkte 598

Dies ist eine Möglichkeit, das zu tun, was Sie wollen:

using System;
using System.Collections.ObjectModel;
using System.Collections.Generic;

public ReadOnlyCollection<string> Titles { get { return new List<string> { "German", "Spanish", "Corrects", "Wrongs" }.AsReadOnly();}}

Es ist sehr ähnlich wie bei einem schreibgeschützten Array.

11 Stimmen

Sie können das einfach tun als public static readonly ReadOnlyCollection<String> Titles = new List<String> { "German", "Spanish", "Corrects", "Wrongs" }.AsReadOnly(); Es ist nicht nötig, die Liste bei jedem Abruf neu zu erstellen, wenn Sie sie ohnehin zu einer ReadOnlyCollection machen.

3voto

nemke Punkte 2400

Arrays gehören wahrscheinlich zu den Dingen, die nur zur Laufzeit ausgewertet werden können. Laufzeit ausgewertet werden können. Konstanten müssen zur Kompilierzeit ausgewertet werden. Versuchen Sie "readonly" zu verwenden anstelle von "const" zu verwenden.

2voto

Herman Schoenfeld Punkte 7934

Beste Alternative:

public static readonly byte[] ZeroHash = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

2voto

Nathan Chappell Punkte 1626

Schnelle Abhilfe für den Fall, dass sie für jemanden hilfreich ist. Ich brauchte eine string[] ein Argument für ein Attribut sein (Übergabe von Inline-Daten für einen Testfall in einer Theorie). readonly wird hier nicht helfen. Aber ich habe es getan:

const string foo = "a|b|c";

[InlineData(foo)]
public void Test(string fooString)
{
    var foo = fooString.Split("|"); // foo == {"a","b","c"}
    ...
}

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