C# Array mit beliebigem Rank an Methode übergeben

Gast #5917565
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 #5917907
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?
Gast #5918321
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
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 #5928085
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> .
Gast #5929336
> 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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.