dachte ich alle Arrays durch Bezugnahme in C#
tatsächlich weitergegeben werden (die Referenz des ursprünglichen Arrays Objekt Wert übergeben wird), die das übliche Verhalten bei Referenztypen in C# ist .
Ihr Verständnis ist teilweise korrekt, die Referenz wird übergeben, wird aber als Wert übergeben, was bedeutet, dass eine neue Referenz erstellt wird, die auf das ursprüngliche Array-Objekt A
verweist.
Die fun(int[] A)
hat seine eigene Kopie der Referenz ist, die auf das Array-Objekt zeigen die 1,2,3 und im fun
enthält erstellen Sie ein neues Array-Objekt B
und Sie zuweisen nur die Referenz des neuen zu Ihre lokale Methodenreferenzvariable, die natürlich keine Auswirkungen auf das ursprüngliche Objekt A
hat, das als Eingabe an die fun
übergeben wurde.
Sie müssten es als Referenz übergeben, wenn Sie die an A
in fun
vorgenommenen Änderungen widerspiegeln möchten, die zum ursprünglichen Array-Objekt zurückreflektiert werden sollen.
Sie können ohne den Weg durch Verweis die Array-Elemente aktualisieren, die gut in Scott Chamberlain's answer erklärt
Hoffe, es hilft!
Sie müssen den ursprünglichen Verweis auf A ändern, Sie tun es nie. Siehe [docs] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/passing-reference-type-parameters#passing-reference-types-by- Wert) – maccettura
Die Elemente des Arrays werden als Referenz übergeben, nicht das Array selbst. Siehe: https://stackoverflow.com/questions/967402/are-arrays-or-lists-passed-by-default-by-reference-in-c –
Wenn Sie Beispiele machen, sollten Sie nicht den gleichen Namen an mehreren Orten verwenden, Es ist schwierig, über Ihr Beispiel zu sprechen. Der Name des Parameters und der Name der an die Funktion übergebenen Variablen sollten zwei verschiedene Namen sein, um das Beispiel einfacher zu machen. –