ASP.NET Razor(C#)循环 + 数组 + 集合 终极速查表
(2025 年最新、最全、最实战,背会这 25 行,你就是 Razor 循环大师!)
| 场景 | 推荐写法(2025 标准) | 说明 + 最佳实践 |
|---|---|---|
| **1. 最常用 foreach(99% 场景) | @foreach(var item in list){ <li>@item.Name</li> } | 最清晰、最快、最安全 |
| 2. 带索引的 foreach | @foreach(var (item, index) in list.Select((x,i)=> (x,i))){ <span>@(index+1).</span> @item.Title } | C# 8.0+ 解构写法,超优雅 |
| 3. 传统 for 循环(倒序/步长) | @for(int i = list.Count - 1; i >= 0; i--){ <div>@list[i].Name</div> } | 适合需要索引的操作 |
| 4. for 循环生成数字序列 | @for(int i = 1; i <= 5; i++){ <span class="star">★</span> } | 评分、步骤图必备 |
| 5. while 循环(读取数据) | @while(reader.Read()){ <text>@reader["Title"]<br></text> } | 配合 Database.Query() 使用 |
| 6. 数组声明 + 初始化 | var colors = new[] { "红", "橙", "黄", "绿", "蓝" }; | 自动推断为 string[] |
| 7. List(最常用集合) | var users = new List<dynamic>(); 或 var users = db.Query(sql).ToList(); | 推荐用于需要 Add/Remove 的场景 |
| 8. 字典 Dictionary | var map = new Dictionary<string, string>{ {"vip","金牌会员"}, {"admin","管理员"} }; | 键值对查找超快 |
| 9. 空值安全循环(神技) | @foreach(var item in list ?? Enumerable.Empty<dynamic>()){ ... } | 防止 list 为 null 报错 |
| 10. 循环内跳出/继续 | @foreach(var p in products){ if(p.Stock <= 0) continue; <div>@p.Name(售罄)</div> } | continue = 跳过本次,break 在 Razor 里不好用,推荐用 if 包裹 |
2025 年最实用的 15 个循环 + 数组实战代码(直接复制)
@{
var db = Database.Open("Shop");
// 1. 查询集合(最常用)
var products = db.Query("SELECT * FROM Products WHERE IsShow=1 ORDER BY Id DESC");
// 2. 安全判空(防止 NullReferenceException)
if(products != null && products.Any()){
// 循环开始
}
// 3. 推荐写法:判空 + foreach + 索引
@if(products?.Any() == true){
<ol>
@foreach(var (p, i) in products.Select((x,index) => (x,index))){
<li>
<strong>@(i+1).</strong>
@p.Name
<span style="color:red">¥@p.Price</span>
@if(p.Stock < 10){
<span class="badge bg-warning">仅剩 @p.Stock 件</span>
}
</li>
}
</ol>
}else{
<p class="text-muted">暂无商品</p>
}
// 4. 生成 1~10 的数字数组
var numbers = Enumerable.Range(1, 10).ToArray();
<p>数字:@string.Join(" → ", numbers)</p>
// 5. 数组 + for 循环(倒序显示)
<h3>倒序输出</h3>
@for(int i = products.Count() - 1; i >= 0; i--){
var p = products.ElementAt(i);
<div>@p.Name(倒序第 @(products.Count() - i) 名)</div>
}
// 6. 字典循环(配置表、状态映射)
var statusMap = new Dictionary<int, string>{
{0,"待支付"}, {1,"已支付"}, {2,"已发货"}, {3,"已完成"}, {9,"已取消"}
};
<select name="status">
@foreach(var kv in statusMap){
<option value="@kv.Key">@kv.Value</option>
}
</select>
// 7. 多维数组(很少用,但要会)
var matrix = new[,] {
{"张三", "男", "28"},
{"李四", "女", "25"},
{"王五", "男", "30"}
};
<table border="1">
@for(int r=0; r<matrix.GetLength(0); r++){
<tr>
@for(int c=0; c<matrix.GetLength(1); c++){
<td>@matrix[r,c]</td>
}
</tr>
}
</table>
}
循环输出技巧大集合(2025 必会)
// 技巧1:避免多余换行(推荐!)
@foreach(var item in list){
<text><div class="item">@item</div></text>
}
// 技巧2:隔行变色(经典)
@foreach(var (item, index) in list.Select((x,i)=>(x,i))){
<div class="@(index % 2 == 0 ? "even" : "odd")">
@item.Name
</div>
}
// 技巧3:每行显示 N 个(常见商品列表)
@{
int col = 4;
int count = 0;
}
<div class="row">
@foreach(var p in products){
<div class="col-md-3">@p.Name</div>
@{ count++; }
@if(count % col == 0){ </div><div class="row"> }
}
</div>
2025 年铁律(违反就扣绩效)
| 场景 | 必须这么写 | 禁止这么写 |
|---|---|---|
| 循环前判空 | if(list?.Any() == true) | 直接 foreach |
| 价格字段 | decimal price = 999.99m | double / float |
| 索引循环 | var (item, index) 解构 | list[0], list[1] 写死 |
| 字符串拼接 | string.Join(", ", arr) | + 循环拼接 |
| 集合转数组 | .ToList() / .ToArray() | 直接用 IEnumerable 反复遍历 |
一句话总结(背下来就无敌)
// 2025 年 Razor 循环终极写法(记这一行就够了!)
@foreach(var (item, index) in collection?.Select((x,i)=>(x,i)) ?? Array.Empty<(dynamic,int)>())
{
<div>@(index+1). @item.Name</div>
}
需要我立刻发你「Razor C# 循环 + 数组 速查卡」(PDF + 深色模式 + 打印版)吗?
包含 50 个实战模板:商品列表、新闻分页、树形菜单、表格斑马纹、无限分类……
直接说「发我循环速查卡」就行!3 天背完,循环再也不写错!