Tutorialsteacher

关注我们

文章
  • C#
  • C# 面向对象编程
  • ASP.NET Core
  • ASP.NET MVC
  • LINQ
  • 控制反转 (IoC)
  • Web API
  • JavaScript
  • TypeScript
  • jQuery
  • Angular 11
  • Node.js
  • D3.js
  • Sass
  • Python
  • Go 语言
  • HTTPS (SSL)
  • 正则表达式
  • SQL
  • SQL Server
  • PostgreSQL
  • MongoDB
  • C# - 入门
  • C# - 版本历史
  • C# - 第一个程序
  • C# - 关键词
  • C# - 类和对象
  • C# - 命名空间
  • C# - 变量
  • C# - 隐式类型变量
  • C# - 数据类型
  • 数字
  • 字符串
  • DateTime
  • 结构体
  • 枚举
  • StringBuilder
  • 匿名类型
  • 动态类型
  • 可空类型
  • C# - 值类型和引用类型
  • C# - 接口
  • C# - 运算符
  • C# - if else 语句
  • C# - 三元运算符 ?
  • C# - Switch 语句
  • C# - For 循环
  • C# - While 循环
  • C# - Do-while 循环
  • C# - 分部类
  • C# - Static 关键字
  • C# - 数组
  • 多维数组
  • 交错数组
  • C# - 索引器
  • C# - 泛型
  • 泛型约束
  • C# - 集合
  • ArrayList
  • List
  • SortedList
  • Dictionary
  • Hashtable
  • Stack
  • Queue
  • C# - 元组 (Tuple)
  • C# - 值元组 (ValueTuple)
  • C# - 内置异常
  • 异常处理
  • throw 关键字
  • 自定义异常
  • C# - 委托
  • Func 委托
  • Action 委托
  • Predicate 委托
  • 匿名方法
  • C# - 事件
  • C# - 协变
  • C# - 扩展方法
  • C# - 流 I/O
  • C# - File 类
  • C# - FileInfo 类
  • C# - 对象初始化器
  • OOP - 概述
  • 面向对象编程
  • 抽象
  • 封装
  • 关联与组合
  • 继承
  • 多态
  • 方法重写
  • 方法隐藏
  • C# - SOLID 原则
  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 接口隔离原则
  • 依赖倒置原则
  • 设计模式
  • 单例模式
  • 抽象工厂模式
  • 工厂方法模式
Entity Framework Extensions - 提升 EF Core 9
  批量插入
  批量删除
  批量更新
  批量合并

C# 数组


更新于:2020年5月10日

变量用于存储字面值,而数组用于存储多个字面值。

数组是一种数据结构,用于存储固定数量的相同数据类型的字面值(元素)。数组元素在内存中是连续存储的。

在 C# 中,数组可以分为三种类型:一维数组、多维数组和交错数组。本文将介绍一维数组。

下图展示了数组的表示。

Array Representation

数组的声明和初始化

可以通过指定元素类型并使用方括号来声明数组。

示例:数组声明
int[] evenNums;  // integer array

string[] cities; // string array

以下语句在单行中声明数组并添加值。

示例:数组声明和初始化
int[] evenNums = new int[5]{ 2, 4, 6, 8, 10 }; 

string[] cities = new string[3]{ "Mumbai", "London", "New York" };

上面,`evenNums` 数组最多可以存储五个整数。方括号 `new int[5]` 中的数字 5 指定了数组的大小。同样,`cities` 数组的大小是三。数组元素在花括号内以逗号分隔的列表形式添加。.

可以使用 `var` 声明数组类型变量,无需方括号。

示例:使用 `var` 声明数组
var evenNums = new int[]{ 2, 4, 6, 8, 10}; 

var cities = new string[]{ "Mumbai", "London", "New York" };

如果在声明时添加数组元素,则大小是可选的。编译器将根据花括号内的元素数量推断其大小,如下所示。

示例:数组声明的简写语法
int[] evenNums = { 2, 4, 6, 8, 10}; 

string[] cities = { "Mumbai", "London", "New York" }

以下示例演示了无效的数组声明。

示例:无效的数组创建
//must specify the size 
int[] evenNums = new int[]; 

//number of elements must be equal to the specified size 
int[] evenNums = new int[5] { 2, 4 };

//cannot use var with array initializer
var evenNums = { 2, 4, 6, 8, 10};

延迟初始化

无需在单个语句中声明和初始化数组。您可以先声明数组,然后使用 `new` 运算符稍后对其进行初始化。

示例:延迟初始化
int[] evenNums;

evenNums = new int[5];
// or
evenNums = new int[]{ 2, 4, 6, 8, 10 };

访问数组元素

可以使用索引访问数组元素。索引是与每个数组元素相关联的数字,从索引 0 开始,到数组大小 - 1 结束。

以下示例使用索引添加/更新和检索数组元素。

示例:使用索引访问数组元素
int[] evenNums = new int[5];
evenNums[0] = 2;
evenNums[1] = 4;
//evenNums[6] = 12;  //Throws run-time exception IndexOutOfRange

Console.WriteLine(evenNums[0]);  //prints 2
Console.WriteLine(evenNums[1]);  //prints 4
尝试一下

请注意,尝试添加超出其指定大小的元素将导致 `IndexOutOfRangeException`。

使用 for 循环访问数组

使用 `for` 循环访问数组元素。在 `for` 循环的条件表达式中使用数组的 `Length` 属性。

示例:使用 for 循环访问数组元素
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;  // update the value of each element by 10
尝试一下

使用 foreach 循环访问数组

使用 `foreach` 循环无需使用索引即可读取数组元素的值。

示例:使用 foreach 循环访问数组
int[] evenNums = { 2, 4, 6, 8, 10}; 
string[] cities = { "Mumbai", "London", "New York" }; 

foreach(var item in evenNums)
            Console.WriteLine(item);   

foreach(var city in cities)
            Console.WriteLine(city);
尝试一下

LINQ 方法

C# 中的所有数组都派生自抽象基类 `System.Array`。

`Array` 类实现了 `IEnumerable` 接口,因此您可以使用 LINQ 扩展方法,例如 `Max()`、`Min()`、`Sum()`、`Reverse()` 等。在此处查看所有扩展方法的列表。

示例:LINQ 方法
int[] nums = new int[5]{ 10, 15, 16, 8, 6 };

nums.Max(); // returns 16
nums.Min(); // returns 6
nums.Sum(); // returns 55
nums.Average(); // returns 55
尝试一下

`System.Array` 类还包含用于创建、操作、搜索和排序数组的方法。在此处查看所有 `Array` 方法的列表。

示例:数组方法
int[] nums = new int[5]{ 10, 15, 16, 8, 6 };

Array.Sort(nums); // sorts array 
Array.Reverse(nums); // sorts array in descending order
Array.ForEach(nums, n => Console.WriteLine(n)); // iterates array
Array.BinarySearch(nums, 5);// binary search
尝试一下

将数组作为参数传递

数组可以作为参数传递给方法参数。数组是引用类型,因此方法可以更改数组元素的值。

示例:将数组作为参数传递
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# 中搜索数组?
  • 如何在 C# 中对数组进行排序?
  • 如何在 C# 中按特定属性对对象数组进行排序?
  • 如何在 C# 中从数组获取逗号分隔的字符串?
  • 如何在 C# 中从数组中删除重复值?
  • 如何在 C# 中合并两个数组而不重复值?
  • 如何在 C# 中计算数组中的特定元素?
  • 数组与 ArrayList 的区别
TUTORIALSTEACHER.COM

TutorialsTeacher.com 是您权威的技术教程来源,旨在通过循序渐进的方法,指导您掌握各种网络和其他技术。

我们的内容旨在帮助所有水平的学习者轻松快速地学习技术。访问本平台即表示您已阅读并同意遵守我们的使用条款和隐私政策,这些条款和政策旨在保障您的体验和隐私权。

[email protected]

关于我们使用条款隐私政策
copywrite-symbol

2024 TutorialsTeacher.com. (v 1.2) 版权所有。