ASP.NET Razor 页面中 C# 与 VB.NET 代码语法 100% 对照表
(2025 最新版,一眼看懂,复制即用)
| 功能场景 | C# 语法(.cshtml) | VB.NET 语法(.vbhtml) |
|---|---|---|
| 文件后缀 | .cshtml | .vbhtml |
| 代码块开头 | @{ | @{ (一样!) |
| 变量声明(自动推断) | var name = "张三"; | Dim name = "张三" |
| 变量声明(显式类型) | string name = "张三"; | Dim name As String = "张三" |
| 整数 | int age = 28; | Dim age As Integer = 28 |
| 布尔值 | bool isVip = true; | Dim isVip As Boolean = True |
| 日期时间 | DateTime now = DateTime.Now; | Dim now As DateTime = DateTime.Now |
| if 判断 | @if(age > 18){ <p>成人</p> } else { <p>未成年</p> } | @If age > 18 Then <p>成人</p> Else <p>未成年</p> End If |
| if-else if-else | @if(x==1){...}else if(x==2){...}else{...} | @If x=1 Then ... ElseIf x=2 Then ... Else ... End If |
| for 循环(计数) | @for(int i=1; i<=5; i++){ <text>★</text> } | @For i = 1 To 5 <text>★</text> Next |
| foreach 循环 | @foreach(var p in products){ <div>@p.Name</div> } | @For Each p In products <div>@p.Name</div> Next |
| while 循环 | @while(reader.Read()){ <text>@reader["Name"]<br></text> } | @While reader.Read() <text>@reader("Name")<br></text> End While |
| switch / Select Case | @switch(status){ case 1: <span>待支付</span> break; case 2: ... default: ... } | @Select Case status Case 1 <span>待支付</span> Case 2 ... Case Else ... End Select |
| 三元运算符 | var txt = isVip ? "VIP用户" : "普通用户"; | Dim txt = If(isVip, "VIP用户", "普通用户") |
| 空值合并 | var name = user?.Name ?? "游客"; | Dim name = If(user?.Name, "游客") |
| 字符串连接 | "欢迎 " + name + " 光临" | "欢迎 " & name & " 光临" |
| 字符串插值(推荐) | $"欢迎 {name},您是第 {count} 位访客" | String.Format("欢迎 {0},您是第 {1} 位访客", name, count)(VB 无插值语法) |
| 注释 | @* 这是一段 Razor 注释 *@ | @* 这是一段 Razor 注释 *@ (一样!) |
| 函数定义(@functions) | @functions { public string Hi(string n) { return "你好 "+n; } } | @functions { Public Function Hi(n As String) As String Return "你好 " & n End Function } |
| 帮助器(@helper) | @helper Price(decimal m){ <span style="color:red">¥@m</span> } | @helper Price(m As Decimal) <span style="color:red">¥@m</span> End Helper |
| Lambda 表达式 | list.Where(p => p.Price > 100) | list.Where(Function(p) p.Price > 100) |
| LINQ 查询 | var vip = users.Where(u=>u.IsVip).OrderBy(u=>u.JoinDate) | Dim vip = users.Where(Function(u) u.IsVip).OrderBy(Function(u) u.JoinDate) |
| Try-Catch | @try { ... } catch(Exception ex) { <p>错误:@ex.Message</p> } | @Try ... Catch ex As Exception <p>错误:@ex.Message</p> End Try |
| using 语句 | using(var db = Database.Open("Shop")){ ... } | VB Razor 不支持 using(需要完整写) |
| IsPost / IsAjax | if(IsPost){ ... } | If IsPost Then ... End If(大小写都可以) |
| Request / Response | Request["name"] | Request("name") (括号一样) |
| 立即执行代码 | @(new Chart(...).Write()) | @(New Chart(...).Write()) |
2025 年终极结论(一句话说死)
| 项目 | C# (.cshtml) | VB.NET (.vbhtml) |
|---|---|---|
| 主流程度 | 99.9% 的项目在用 | 几乎绝迹 |
| 社区、教程、招聘 | 满天飞 | 基本找不到 |
| 语法简洁度 | 完胜(var、=>、??、$”…”) | 输(Dim、&、Function、End If) |
| 学习成本 | 极低(和 JavaScript 很像) | 中等 |
| 官方推荐 | 强烈推荐 | 已废弃 |
| 2025 年建议 | 全部项目强制使用 C# | 仅用于维护 10 年以上老项目 |
真实案例对比(同一功能)
<!-- C# 版(推荐!)-->
@{
var list = Database.Open("Shop").Query("SELECT * FROM News ORDER BY Id DESC LIMIT 10");
var count = Request["page"].AsInt(1) * 10;
}
<h2>最新资讯</h2>
<ul>
@foreach(var n in list){
<li>@n.Title (@n.AddTime.ToString("yyyy-MM-dd"))</li>
}
</ul>
<!-- VB 版(基本没人用)-->
@{
Dim list = Database.Open("Shop").Query("SELECT * FROM News ORDER BY Id DESC LIMIT 10")
Dim count = Request("page").AsInt(1) * 10
}
<h2>最新资讯</h2>
<ul>
@For Each n In list
<li>@n.Title (@n.AddTime.ToString("yyyy-MM-dd"))</li>
Next
</ul>
一眼看出:C# 更短、更现代、更舒服!
最终建议(2025 年)
| 你是谁? | 必须怎么选? |
|---|---|
| 新项目 / 个人学习 | 100% 用 C# (.cshtml) |
| 公司项目 / 团队开发 | 强制所有人用 C# |
| 维护 10+ 年老系统 | 才允许继续用 VB |
| 想未来好找工作 | 学 C#,VB 早点忘掉 |
需要我立刻发你「C# Razor 语法速成包」(PDF + 深色壁纸 + VS Code 高亮配置)吗?
3 天背完,终身受用!
直接说「发我 C# Razor 速成包」就行!