Passaggio di matrici come argomenti (Guida per programmatori C#)
Le matrici possono essere passate come argomenti ai parametri di metodo. Le matrici sono infatti tipi di parametri, pertanto il metodo può modificare il valore degli elementi.
Passaggio di matrici unidimensionali come parametri
È possibile passare una matrice unidimensionale inizializzata a un metodo. L'istruzione seguente, ad esempio, invia una matrice a un metodo di stampa.
int[] theArray = { 1, 3, 5, 7, 9 };
PrintArray(theArray);
Nel codice seguente viene illustrata un'implementazione parziale del metodo di stampa.
void PrintArray(int[] arr)
{
// Method code.
}
È possibile inizializzare e passare una nuova matrice in un passaggio, come mostrato nell'esempio seguente.
PrintArray(new int[] { 1, 3, 5, 7, 9 });
Esempio
Descrizione
Nell'esempio seguente, una matrice di stringhe viene inizializzata e passata come argomento a un metodo PrintArray per le stringhe. Nel metodo vengono visualizzati gli elementi della matrice. Vengono quindi chiamati i metodi ChangeArray e ChangeArrayElement per dimostrare che l'invio di un argomento di matrice per valore non impedisce le modifiche agli elementi della matrice.
Codice
class ArrayClass
{
static void PrintArray(string[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
System.Console.Write(arr[i] + "{0}", i < arr.Length - 1 ? " " : "");
}
System.Console.WriteLine();
}
static void ChangeArray(string[] arr)
{
// The following attempt to reverse the array does not persist when
// the method returns, because arr is a value parameter.
arr = (arr.Reverse()).ToArray();
// The following statement displays Sat as the first element in the array.
System.Console.WriteLine("arr[0] is {0} in ChangeArray.", arr[0]);
}
static void ChangeArrayElements(string[] arr)
{
// The following assignments change the value of individual array
// elements.
arr[0] = "Sat";
arr[1] = "Fri";
arr[2] = "Thu";
// The following statement again displays Sat as the first element
// in the array arr, inside the called method.
System.Console.WriteLine("arr[0] is {0} in ChangeArrayElements.", arr[0]);
}
static void Main()
{
// Declare and initialize an array.
string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
// Pass the array as an argument to PrintArray.
PrintArray(weekDays);
// ChangeArray tries to change the array by assigning something new
// to the array in the method.
ChangeArray(weekDays);
// Print the array again, to verify that it has not been changed.
System.Console.WriteLine("Array weekDays after the call to ChangeArray:");
PrintArray(weekDays);
System.Console.WriteLine();
// ChangeArrayElements assigns new values to individual array
// elements.
ChangeArrayElements(weekDays);
// The changes to individual elements persist after the method returns.
// Print the array, to verify that it has been changed.
System.Console.WriteLine("Array weekDays after the call to ChangeArrayElements:");
PrintArray(weekDays);
}
}
// Output:
// Sun Mon Tue Wed Thu Fri Sat
// arr[0] is Sat in ChangeArray.
// Array weekDays after the call to ChangeArray:
// Sun Mon Tue Wed Thu Fri Sat
//
// arr[0] is Sat in ChangeArrayElements.
// Array weekDays after the call to ChangeArrayElements:
// Sat Fri Thu Wed Thu Fri Sat
Passaggio di matrici multidimensionali come parametri
Una matrice multidimensionale inizializzata viene passata a un metodo nello stesso modo di una matrice unidimensionale.
int[,] theArray = { { 1, 2 }, { 2, 3 }, { 3, 4 } };
Print2DArray(theArray);
Nel codice seguente viene illustrata una dichiarazione parziale di un metodo di stampa che accetta una matrice bidimensionale come argomento.
void Print2DArray(int[,] arr)
{
// Method code.
}
È possibile inizializzare e passare una nuova matrice in un passaggio, come mostrato nell'esempio seguente.
Print2DArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });
Esempio
Descrizione
Nell'esempio seguente, una matrice bidimensionale di Integer viene inizializzata e passata al metodo Print2DArray. Nel metodo vengono visualizzati gli elementi della matrice.
Codice
class ArrayClass2D
{
static void Print2DArray(int[,] arr)
{
// Display the array elements.
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
System.Console.WriteLine("Element({0},{1})={2}", i, j, arr[i, j]);
}
}
}
static void Main()
{
// Pass the array as an argument.
Print2DArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
Element(0,0)=1
Element(0,1)=2
Element(1,0)=3
Element(1,1)=4
Element(2,0)=5
Element(2,1)=6
Element(3,0)=7
Element(3,1)=8
*/
Vedere anche
Riferimenti
Matrici (Guida per programmatori C#)
Matrici unidimensionali (Guida per programmatori C#)
Matrici multidimensionali (Guida per programmatori C#)
Matrici irregolari (Guida per programmatori C#)