C# 数组 Array
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。
声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。
所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组声明 和初始化 Array Declaration and Initialization
可以通过使用方括号指定其元素的类型来声明数组
int[] evenNums; // 整数 数组
string[] cities; // 字符串 数组
以下内容在单个语句中声明并将值添加到数组中。
int[] numbers = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };
string[] names = new string[4] { "Ma", "Le", "ma", ".net" };
上面,names 数组最多可以存储4个字符串。 方括号 new string45] 中的数字 4 指定数组的大小。
另一个numbes 我们没有限定数量,编译器会自己从后面推断出来。
延迟初始化 Late Initialization
不必在单个语句中声明和初始化数组。 您可以先声明一个数组,然后使用 new 运算符对其进行初始化。
int[] evenNums;
evenNums = new int[5];
// or
evenNums = new int[]{ 2, 4, 6, 8, 10 };
访问数组元素 Accessing Array Elements
可以使用索引访问数组元素。 索引是与每个数组元素关联的数字,从索引 0 开始,以数组大小 - 1 结束。
以下示例使用索引添加/更新和检索数组元素。
int[] evenNums = new int[5];
evenNums[0] = 2;
evenNums[1] = 4;
//evenNums[6] = 12; //运行时抛出异常 System.IndexOutOfRangeException:“Index was outside the bounds of the array.”
Console.WriteLine(evenNums[0]); // 2
Console.WriteLine(evenNums[1]); // 4
访问超出数组大小范围的元素,会抛出异常 System.IndexOutOfRangeException
使用 for 循环来访问元素 Accessing Array using for Loop
使用 for 循环访问数组元素。 在 for 循环的条件表达式中使用数组的Length属性。
int[] evenNums = { 2, 4, 6, 8, 10 };
for (int i = 0; i < evenNums.Length; i++)
Console.WriteLine(evenNums[i]);
for (int i = 0; i < evenNums.Length; i++)
evenNums[i] = evenNums[i] + 10; // 让每个元素加上10
使用 foreach来访问元素 Accessing Array using foreach Loop
使用 foreach 循环在不使用索引的情况下读取数组元素的值。
static void Main(string[] args)
int[] numbers = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };
string[] names = new string[4] { "Ma", "Le", "ma", ".net" };
foreach (var item in numbers)
Console.Write(item + ",");
foreach (var item in names)
Console.Write(item + ",");
109,97,108,101,109,97,46,110,101,116,Ma,Le,ma,.net,
linq 方法
C# 中的所有数组都派生自抽象基类 System.Array。
Array 类实现了 IEnumerable 接口,因此您可以使用 LINQ 扩展方法,例如 Max()、Min()、Sum()、Reverse() 等。请在此处查看所有扩展方法的列表。
static void Main(string[] args)
int[] numbers = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };
var max = numbers.Max(); //116
var min = numbers.Min(); //46
var sum = numbers.Sum(); //994
var average = numbers.Average(); //99.4 double
System.Array 类还包括用于创建、操作、搜索和排序数组的方法。 在此处查看所有 Array 方法的列表。
static void Main(string[] args)
int[] nums = new int[] { 109, 97, 108, 101, 109, 97, 46, 110, 101, 116 };
Array.Sort(nums); // 排序
Array.Reverse(nums); // 倒序
Array.ForEach(nums, n => Console.WriteLine(n)); // 迭代数组
Array.Sort(nums); // 排序
Array.BinarySearch(nums, 109);// 二分查找,使用前需要排序 Sort
将数组作为参数传递 Passing Array as Argument
数组可以作为参数传递给方法参数。 数组是引用类型,因此该方法可以更改数组元素的值。
public static void Main(){
int[] nums = { 1, 2, 3, 4, 5 };
UpdateArray(nums);
foreach(var item in nums)
Console.WriteLine(item);
public static void UpdateArray(int[] arr)
for(int i = 0; i < arr.Length; i++)
arr[i] = arr[i] + 10;
给数组添加一个新的元素
C# 的数组在创建的时候就是固定长度了。 所以如果添加新的元素,需要新创建一个数组长度加1,然后把旧数组的数据拷进来。
在 泛型推出后,跟其它的语言不太一样,我们通常会用 List 来替代 数组。 使用起来会更加方便。
下一篇:C# 多维数组