Entwickler-Ecke
C# - Die Sprache - Konstantenarray?
Regan - Mi 27.08.08 19:16
Titel: Konstantenarray?
Moin,
ich habe seit kurzem die Sprache gewechselt und schreibe jetzt nur noch in C#. Als ich meinen alten Quellcode übertragen wollte, bin ich auf folgendes Problem gestoßen:
Ich habe verschiedene Strings ("en", "de" etc.) und möchte diese als Konstantenarray festlegen. Wie mache ich das? Ich wollte schon ein Array verweden. Da habe ich aber festgestellt, dass man das ja initialisieren muss.
Danke schonmal für eine Antwort.
MfG
Regan
Christian S. - Mi 27.08.08 19:25
Meinst Du sowas?
C#-Quelltext
1:
| readonly string[] constants = new String[] { "foo", "bar" }; |
Regan - Mi 27.08.08 19:31
Naja, eigentlich ja, aber ich weiß nicht, wie ich da IndexOf überprüfen kann, also ob ein Element vorhanden ist.
Christian S. - Mi 27.08.08 19:34
Irgendwie verstehe ich nicht so ganz, was Du meinst. ;-)
Kannst Du vielleicht kurz ein Delphi-Beispiel posten, welches Du portieren willst?
Kha - Mi 27.08.08 19:54
Regan hat folgendes geschrieben: |
| Naja, eigentlich ja, aber ich weiß nicht, wie ich da IndexOf überprüfen kann, also ob ein Element vorhanden ist. |
Hilft dir
Array.IndexOf ;) ?
@Christian: Ich denke, es geht um eine "de" -> 0, "en" -> 1, ...-Zuordnung.
Edit: Der große Unterschied zu Delphi ist, dass du das Array außerhalb der Methode deklarieren solltest (am besten als
static readonly), sonst wird es bei jedem Aufruf erstellt.
Regan - Mi 27.08.08 20:07
Kha hat folgendes geschrieben: |
Regan hat folgendes geschrieben: | | Naja, eigentlich ja, aber ich weiß nicht, wie ich da IndexOf überprüfen kann, also ob ein Element vorhanden ist. | Hilft dir Array.IndexOf ;) ? |
Bei der String-Variante von Christian geht das aber nicht :wink: .
Kha hat folgendes geschrieben: |
| Edit: Der große Unterschied zu Delphi ist, dass du das Array außerhalb der Methode deklarieren solltest (am besten als static readonly), sonst wird es bei jedem Aufruf erstellt. |
Aha. Ich versuche nochmal mein problem deutlich zu machen: Ich habe bestimmte Strings ("de, "en") und habe einen weiteren String, der als Eingabe existiert. Nun möchte ich prüfen, ob der Eingabestring zu einem der bestimmten Strings passt/übereinstimmt.
Deshalb wollte ich diese String in ein Array/List<string>/StringCollection/string[] konstant deklarieren.
In Delphi hab ich mir da immer ein Array gemacht und bin jedes Element durchgegangen mit einer
for to Schleife. Da aber C# bei anderen Klassen die
IndexOf-Methode bereitstellt, dachte ich, dass ich die nehmen kann, um den Aufurf zu verkürzen.
Ich hoffe ich habe es deutlich erklärt. Sonst erstell ich gern noch ein Delphibeispielprojekt.
Christian S. - Mi 27.08.08 20:13
Regan hat folgendes geschrieben: |
Kha hat folgendes geschrieben: | Regan hat folgendes geschrieben: | | Naja, eigentlich ja, aber ich weiß nicht, wie ich da IndexOf überprüfen kann, also ob ein Element vorhanden ist. | Hilft dir Array.IndexOf ;) ? |
Bei der String-Variante von Christian geht das aber nicht :wink: . |
Nüsch? :gruebel:
Das hier geht. Zwar in Oxygene geschrieben, das ist ja aber wurscht:
Delphi-Prism-Quelltext
1: 2:
| var arr : Array of String := Array of String(['foo', 'bar']); Console.WriteLine( &Array.IndexOf(arr, 'bar') ); |
Ansonsten hab ich jetzt, glaube ich, verstanden, was Du machen willst. Sollte
Array.IndexOf wirklich nicht gehen, könntest Du Dir noch eine eigene Extension Method schreiben.
Skiller-1988 - Do 28.08.08 08:13
Hi,
also ich habe das ganze mal kurz in C# ausprobiert und die Variante von Christian S. hat bei mir funktioniert.
mein Versuch:
C#-Quelltext
1:
| readonly string[] arrStr = new String[] { "String1", "String2" }; |
C#-Quelltext
1:
| label1.Text = Convert.ToString(Array.IndexOf(arrStr, "String1")); |
Das Label gibt dann entweder 0 oder 1 zurück in dem Fall wie oben dargestellt 0.
mit static funktionierte es übrigens ebenfalls.
C#-Quelltext
1:
| static readonly string[] arrStr = new String[] { "String1", "String2" }; |
Regan - Do 28.08.08 17:01
Vielen Dank. Jetzt geht es. Das
static hat gefehlt, das mir
Kha schon vorgeschlagen hatte. Ich habe auch vergessen zu sagen, dass das Array in eine statische Klasse kommen soll. Deshalb kam bei mir immer der Fehler, dass das nicht initialisiert werden kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!