C# Array mit beliebigem Rank an Methode übergeben

Gast #5917565
Lesenswert?

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 ?
Gast #5918321
Lesenswert?

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.
#5918324
Lesenswert?

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
Gast #5929336
Lesenswert?

> 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 von einem Moderator gelöscht.
#5929413
Lesenswert?

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.
#5936255
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren