6.6k Aufrufe
Gefragt in Anwendungen(Java,C++...) von mctommson Einsteiger_in (55 Punkte)
Hi!

Warum darf man in C# keine Array Konstante initialisieren?

Habe das Array wie folgt initialisiert:
public const string[] arrxmlnodesBLA = new string[9] { "Bla1", "Bla2", "Bla3", "Bla4", "Bla5", "Bla6", "Bla7", "Bla8", "Bla9" };

Beim Kompilieren erhalte ich folgende Fehlermeldung:
Fehler 1 "WindowsFormsApplication1.Program.arrxmlnodesBLA" hat den Typ "string[]". Ein Konstantenfeld mit einem anderen Referenztyp als "String" kann nur mit NULL initialisiert werden.

Werde nicht so ganz schlau daraus. Heisst das, dass es nur string Konstanten geben darf? Schließlich kann ich auch int Konstanten (wie bspw. PI) am Anfang des Programms festlegen, oder?

Wie kann ich dieses Problem umgehen? Ich arbeite an einem WindowsForms Projekt und möchte gerne in der Program.cs einige Konstanten (wie Pfadkonstanten, XMLNode-Konstanten, etc.) festlegen. Pfadkonstanten funktionieren, da nur string. string[] funktioniert jedoch nicht.

Danke euch!

4 Antworten

0 Punkte
Beantwortet von teerbaby Mitglied (525 Punkte)
Ich denke mal, dass eine Konstante eben nur für einen Wert gedacht ist. Du könntest aber die Konstanten deklarieren und diese dann in einem Array, Collection o.ä. verwenden.
0 Punkte
Beantwortet von mctommson Einsteiger_in (55 Punkte)
Jetzt kommt die Fehlermeldung:
"Instanzmember können nicht in einer statischen Klasse deklariert werden."

Ich glaube das Problem ist, dass ich diese Konstanten in der program.cs einer Windows-Form-Anwendung deklarieren und initialisieren will. Anscheinend darf man das nicht.

Ich würde gerne aber irgendwo im Programm an erster Stelle diese Konstanten deklarieren, weil ich sie später auch in anderen Klassenv erwenden will. Wo würdet ihr die Deklaration machen? In der program.cs, in der Form1.cs oder ganz wo anders?

Lg
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Du könntest statt "const" "readonly" verwenden; eine Variable oder Eigenschaft mit diesem Schlüsselwort erlaubt genau einmalig eine Zuweisung, danach kann ihr Wert nur noch gelesen werden; das sollte auch mit string[] Arrays funktionieren.

Um die Fehlermeldung mit den Instanzmembers loszuwerden, mußt du die betreffende Variable mit dem Schlüsselwort "static" definieren, dann ist es eine Klassen- und keine Instanzenvariable.
0 Punkte
Beantwortet von mctommson Einsteiger_in (55 Punkte)
Danke!

Mit public static readonly string [] funktioniert auch die Initialisierung wunderbar!

Lg
...