Ich habe hier eine Methode, der ich gerne ein Array von Werten des Typs Double übergeben möchte. Prinzipiell sind dabei Ranks von 1 bis 255 möglich und unter Umständen auch sinnvoll ;-) Ist das Array erstmal in der Methode angekommen, könnte ich ja mit Hilfe von Arrayname.Rank die Anzahl der Dimensionen bestimmen. Aber, C# läßt mich immer nur eine in der Parameterliste festgelegte Anzahl von Ranks übergeben. Ich kann die Methode natürlich überladen, was bei der Anzahl an Möglichkeiten aber schon ziemlich uncool kommt. Wie geht es richtig ?
Nutze einfach einen Parameter vom Typ System.Array .
fop schrieb: > Wie geht es richtig ? Mit einer richtigen Programmiersprache? C# ist was für Spielkinder.
fop schrieb: > Prinzipiell sind dabei Ranks von 1 bis 255 > möglich und unter Umständen auch sinnvoll ;-) Der Rang einer Matrix ("Rank") ist die (maximale) Anzahl linear unabhängiger Zeilen bzw. Spalten. Ist das wirklich gemeint?
So, ich habe es jetzt mit System.Array umgesetzt. Nun gut, jetzt erfolgt die Prüfung des Typs zur Laufzeit statt zur Compilierzeit, aber es funktioniert. Die Eigenschaft "Rank" eines Array bei C#, wird von Microsoft zwar auch mit Rang übersetzt, gibt jedoch vermutlich etwas ganz anderes an, als den Rang einer Matrix. Ich habe nur den Anfang der Erklärung von "linear unabhängig" gelesen und denke, dass es mir um etwas wesentlich Einfacheres geht. Es geht um die Dimensionen des Array, also wieviele Indizes muss ich angeben, um ein Element zu adressieren.
Jetzt wirds wirklich mal Zeit für ein wenig Code um darzustellen, was du machen wilst. Array.Rank gibt dir die Anzahl der Dimensionen zurück, die dein Array hat. also bei var foo = new Array[3,2] var bar = new Array[5] bekommst du für foo.Rank eine 2 zurück und bei bar eine 1
:
Bearbeitet durch User
fop schrieb: > So, ich habe es jetzt mit System.Array umgesetzt. Nun gut, jetzt erfolgt > die Prüfung des Typs zur Laufzeit statt zur Compilierzeit, aber es > funktioniert. Wieso? Es gibt doch den gegnerischen Typen System.Array<T> .
> Wieso? Es gibt doch den gegnerischen Typen System.Array<T> .
Klingt erstmal gut. Leider meint der Compiler dazu :
Fehler Typ 'System.Array' ist nicht generisch und kann daher nicht mit
Typargumenten verwendet werden.
Beitrag #5929407 wurde vom Autor gelöscht.
fop schrieb: >> Wieso? Es gibt doch den gegnerischen Typen System.Array<T> . > > Klingt erstmal gut. Leider meint der Compiler dazu : > > Fehler Typ 'System.Array' ist nicht generisch und kann daher nicht mit > Typargumenten verwendet werden. Die generischen Typen sind in System.Collection.Generic drin. Aber da gibts aber kein Array. https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DEN-US%26k%3Dk(System.Collections.Generic);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.7.2);k(DevLang-csharp)%26rd%3Dtrue&view=netframework-4.8 Wenn man solche Klimmzüge machen muss, sollte man sich immer überlegen, ob das Design etwas taugt.
:
Bearbeitet durch User
List<T> sollte doch gehen und kannst du genauso wie ein Array über Index zugreifen
Torben schrieb: > List<T> sollte doch gehen und kannst du genauso wie ein Array über > Index zugreifen Jo, aber nur eindimensionale.
Ich frage mich gerade wie du die 255 Dimensionen deklarierst und initialisierst. Sind die Dimensionen alle gleich groß? Grüße Yarra
Also ich hätte das gleich mit einem Struct gelöst welches das individuell dimensionale Array enthält. Gut möglich dass dies sogar etwas sauberer aussehen würde, da die wahrscheinlichkeit hoch ist, dass man die ein oder andere Funktion dazuschreiben kann die dieses Array verarbeitet. Eventuell ermöglich dies sogar das eher unhandlich anmutende Array sogar komplett von anderen Klassen abzukapseln. Das ist nur dann die schlechtere Lösung wenn es aufs letzte bisschen Performance ankommt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.