C# 循环和数组

本文介绍了编程中的三种主要循环类型:For、ForEach和While,并提供了实例来说明如何在实际代码中应用它们。For循环适用于已知迭代次数的情况,例如计数;ForEach循环则用于遍历集合或数组,适合处理数据项;While循环基于条件执行,当条件满足时不断重复代码块。示例涵盖了在ASP.NET环境中如何使用这些循环结构。

语句可以在循环中重复执行。
For 循环
如果需要重复运行相同的语句,您可以编写一个循环。

如果您能够确定循环的次数,则可以使用 for 循环。这种循环类型是专门为计数或反向计数设计的:

实例

@for(var i = 10; i < 21; i++) {

Line @i

} 运行实例 For Each 循环 如果您需要处理集合或数组,则通常要用到 for each 循环。

集合是一组相似的对象,for each 循环允许您在每个项目上执行一次任务。for each 循环会遍历集合直到完成为止。

下面的例子遍历 ASP.NET Request.ServerVariables 集合。

实例

  • @foreach (var x in Request.ServerVariables) {
  • @x
  • }
运行实例 While 循环 while 是一种通用的循环。

while 循环以关键词 while 开始,后面跟括号,其中定义循环持续的长度,然后是要循环的代码块。

while 循环通常会对用于计数的变量进行增减。

在下面的例子中,循环每运行一次,+= 运算符就向变量 i 增加 1。

实例

@{ var i = 0; while (i < 5) { i += 1;

Line #@i

} } 运行实例 数组 如果您需要存储相似的变量,但又不希望为每个项目创建独立的变量,那么数组就派上用场了:

实例
@{
string[] members = {“Jani”, “Hege”, “Kai”, “Jim”};
int i = Array.IndexOf(members, “Kai”)+1;
int len = members.Length;
string x = members[2-1];
}

Members

@foreach (var person in members) {

@person

}

The number of names in Members are @len

The person at position 2 is @x

Kai is now in position @i

运行实例
C# 中,`DataTable` **数组(Array)** 是两种不同的数据结构,虽然都可以用来存储多个数据,但它们的设计目的、使用场景特性有显著区别。 --- ### ✅ 一、基本定义 | 类型 | 定义 | |------|------| | **数组 (Array)** | 固定大小的连续内存块,用于存储相同类型的元素(如 `string[]`, `int[]`),支持一维、多维或锯齿数组。 | | **DataTable** | .NET 中的一个类(位于 `System.Data` 命名空间),表示一个内存中的表格,类似数据库表,包含行(`DataRow`)、列(`DataColumn`)约束等结构。 | --- ### ✅ 二、核心区别对比表 | 特性 | 数组(Array) | DataTable | |------|----------------|-----------| | **类型** | 引用类型(固定长度) | 类对象(引用类型) | | **存储结构** | 线性结构(一维/二维) | 表格结构(行 × 列) | | **数据类型** | 所有元素必须是同一类型(或其基类) | 每列可以有不同的数据类型 | | **大小** | 创建后大小固定(不可变) | 动态增长(可添加行、列) | | **索引方式** | `array[i]` 或 `array[i,j]` | `dataTable.Rows[i]["ColumnName"]` 或 `row.Field<T>(colIndex)` | | **命名支持** | 不支持字段名,只能通过索引访问 | 支持列名(`"Name"`)、行集合、主键等 | | **元数据支持** | 无 | 支持列类型、列名、主键、表达式、约束等 | | **序列化与绑定** | 需手动处理 | 支持数据绑定(如 WinForms DataGridView)、XML/CSV 导出 | | **性能** | 极快,直接内存访问 | 相对较慢,封装层次多 | | **用途** | 算法、数学计算、临时数据缓存 | 数据处理、报表展示、数据库模拟、ETL 流程 | --- ### ✅ 三、代码示例对比 #### 示例:存储两个人的信息 ##### 1. 使用数组(简单但不灵活) ```csharp // 方式1:字符串数组数组(锯齿数组) string[][] peopleArray = new string[][] { new string[] { "Alice", "25", "Developer" }, new string[] { "Bob", "30", "Manager" } }; // 访问:peopleArray[0][1] → "25" Console.WriteLine(peopleArray[0][0]); // 输出 Alice ``` > ❌ 缺点:没有列名,无法区分“姓名”还是“年龄”,易出错。 --- ##### 2. 使用 DataTable(结构清晰) ```csharp DataTable dt = new DataTable("People"); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("Job", typeof(string)); // 添加数据 dt.Rows.Add("Alice", 25, "Developer"); dt.Rows.Add("Bob", 30, "Manager"); // 访问 Console.WriteLine(dt.Rows[0]["Name"]); // 输出 Alice Console.WriteLine(dt.Rows[0].Field<int>("Age")); // 输出 25(类型安全) ``` > ✅ 优点:结构清晰、支持类型、可绑定 UI、可导出为 XML/CSV。 --- ### ✅ 四、何时使用? | 场景 | 推荐使用 | |------|----------| | 数学运算、图像处理、高性能循环 | ✅ 数组 | | 存储异构数据(不同字段类型) | ✅ DataTable | | 需要列名、结构化访问 | ✅ DataTable | | 与数据库交互、填充查询结果 | ✅ DataTable | | 数据绑定到 UI 控件(如 DataGridView) | ✅ DataTable | | 临时保存少量同类型数据 | ✅ 数组 | | 需要动态增删字段或行 | ✅ DataTable | | 大量数据且追求极致性能 | ✅ 数组 或 `List<T>` | --- ### ✅ 五、其他说明 - `List<T>` 是比数组更灵活的选择(动态长度),常用于替代数组。 - `DataTable` 虽然功能强大,但占用内存较大,不适合高频计算场景。 - 在现代开发中,**POCO 类 + `List<T>`**(如 `List<Person>`)通常是比 `DataTable` 更推荐的方式,除非你需要与旧系统(如 ADO.NET、DataSet)兼容或做数据绑定。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值