Ich denke, es ist ziemlich blöde Frage. Ich möchte ein Array-Argument nach Methode nach Wert übergeben, nicht nach Link, d. H. Ich möchte eine Kopie des Objekts erstellen, um zu verhindern, dass das Argument innerhalb der Methode geändert wird. Vielen Dank im Voraus.Übergeben Array zu Methode in C#
Antwort
Wenn Ihre Methode destruktiv auf den Inhalt des Parameters reagiert, erstellen Sie einfach eine Kopie des Arrays innerhalb der Methode.
Dies ist so einfach wie
var copy = parameter.ToArray();
, wenn Sie LINQ verwenden, sonst kann es auch leicht mit Array.Copy
erfolgen.
Dies ist viel besser als das Kopieren vor Aufruf der Methode (wie Sie in der Frage erwähnen), weil Sie immer vergessen können, das zu tun. Kopieren innerhalb die Methode lässt keine Fehlermöglichkeit.
+1 für das Kopieren innerhalb der Methode vorgeschlagen. – juharr
Es gibt keine Möglichkeit, dies in C# zu tun. Sie müssen das Array entweder innerhalb der Methode oder auf der aufrufenden Seite selbst kopieren:
int[] array = GetIntArray();
CallSomeMethod(array.ToArray()); // ToArray() makes a copy of the input...
Arrays sind Referenztypen. Sie können nicht automatisch geklont werden, wenn Sie an eine Methode übergeben werden.
Sie haben einen Klon von Hand zu machen, und die sich ergebende Anordnung an die Methode übergeben:
int[] array = ...
MyMethod((int[])array.Clone());
Hinweis, dass dies ein O (n) Betrieb kann, kann sehr langsam sein für große Arrays oder viele wiederholte Anrufe.
Mein Verständnis der Frage in der OP ist das Plakat sucht nach einer Möglichkeit, einen Referenztyp nach Wert zu übergeben. Ich fand dieses Beispiel:
class PassingRefByVal
{
static void Change(int[] arr)
{
//arr[0]=888; // This change affects the original element.
arr = new int[5] {-3, -1, -2, -3, -4}; // This change is local.
Console.WriteLine("Inside the method, the first element is: {0}", arr[0]);
}
public static void Main()
{
int[] myArray = {1,4,5};
Console.WriteLine("Inside Main, before calling the method, the first element is: {0}", myArray [0]);
Change(myArray);
Console.WriteLine("Inside Main, after calling the method, the first element is: {0}", myArray [0]);
Console.ReadLine();
}
}
hier: http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx
Hoffnung das ist, was Sie suchen.
Ist das nicht die Standardmethode zum Übergeben eines Array-Arguments? – comecme
- 1. Übergeben Methode an Methode in C++
- 2. Übergeben Array von Javascript zu C# in Metro-App
- 3. übergeben Sie einfach Java-Array zu primitiven c-Array-SWIG
- 4. C++ - Objekt erstellt in Methode übergeben
- 5. Übergeben Array zu Funktionsparameter in OpenCL
- 6. Übergeben Multi-Array in Objective C zu einer Funktion
- 7. Swig: übergeben Byte-Array in Java zu C
- 8. Array/Liste der Variablen an Methode übergeben
- 9. Übergeben Array von Zeichenfolgen mit Float-Werte zu POST-Methode
- 10. Ein Array durch Referenz in C übergeben?
- 11. übergeben Array-Element Zeiger in c
- 12. Wie Array (Array von lange in Java) von Java nach C zu übergeben ++ mit Swig
- 13. Übergeben Array von Klassenobjekt von C# zu VB6
- 14. Übergeben Array von Strukturen von Python zu C
- 15. Übergeben eines Sub-Array als Array in C#
- 16. Die beste Methode, um ein Array in C zu verschieben?
- 17. C++: Ist es normal Array Referenz auf Funktion zu übergeben
- 18. Übergeben einer Methode an ein BackgroundWorker.DoEvent C#
- 19. Wie Scala Array in Scala Vararg Methode übergeben?
- 20. Wie übergeben Sie Array als Parameter in der Java-Methode?
- 21. Byte-Array wird beschädigt, wenn an eine andere Methode übergeben
- 22. C++ zweidimensionales Array an Funktion übergeben
- 23. Übergeben ein Array zu Feed svg.js Polylinie Array-Methode löst einen Fehler
- 24. Übergeben von Arrays in ein Array von Zeigern in C
- 25. Übergeben eines JavaScript-Callback an eine C++ - Methode in Qml
- 26. Struktur zu Array in c
- 27. Elegante Methode, um leere Verschlüsse in Swift zu übergeben
- 28. Übergeben Sie Methode zu einer Variablen
- 29. Übergeben Sie Methode als Parameter in Groovy
- 30. Übergabe angularjs Array zu ASP.Net MVC-Methode
Das Ändern des Arguments ist nie ein Problem, das sich nicht ausbreitet. Ändert nur den Array-Inhalt. –