C# 中数组或列表默认通过引用传递吗

作者:编程家 分类: arrays 时间:2025-10-26

在C#中,数组和列表在传递给方法或函数时默认情况下是通过引用传递的。这意味着,当你将数组或列表传递给一个方法时,实际上传递的是它们在内存中的地址,而不是它们的副本。因此,对传递的数组或列表的修改会影响到调用方。

### 引用传递的基本概念

在C#中,函数参数默认情况下是按值传递的,这意味着函数接收到的是参数的副本,而不是原始值。但对于引用类型,情况有所不同。数组和列表是引用类型,它们在内存中存储在堆上,而传递引用类型的参数时,实际上传递的是它们在堆上的地址。

### 示例代码说明

下面是一个简单的示例,演示了数组通过引用传递的情况:

csharp

using System;

class Program

{

static void Main()

{

int[] numbers = { 1, 2, 3, 4, 5 };

Console.WriteLine("原始数组:");

PrintArray(numbers);

ModifyArray(numbers);

Console.WriteLine("修改后的数组:");

PrintArray(numbers);

}

static void ModifyArray(int[] arr)

{

// 在方法中修改数组

for (int i = 0; i < arr.Length; i++)

{

arr[i] *= 2;

}

Console.WriteLine("在方法中修改数组:");

PrintArray(arr);

}

static void PrintArray(int[] arr)

{

// 打印数组元素

foreach (var num in arr)

{

Console.Write(num + " ");

}

Console.WriteLine();

}

}

在上面的示例中,`ModifyArray` 方法接收一个整型数组并将每个元素乘以2。在 `Main` 方法中,我们创建一个数组并调用 `ModifyArray` 方法,然后打印修改后的数组。由于数组是通过引用传递的,所以 `ModifyArray` 方法中的修改会影响原始数组,最终打印的数组将会是每个元素都乘以2的结果。

###

总的来说,在C#中,数组和列表默认通过引用传递。这种引用传递的机制使得在方法中对数组或列表的修改能够影响到调用方,需要在代码中谨慎处理引用类型的参数,以免出现意外的副作用。