You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何VB中的AND语句编译后会变为C#的&运算符?

VB.NET的And运算符为何被反编译为C#的&而非&&?

原VB.NET代码

If IsDataProperty(p) And (p.Name.StartsWith("ref_") = False) Then
 ...
End If

反编译得到的C#代码

if (this.IsDataProperty(p) & !p.Name.StartsWith("ref_")) {
...
}

你疑惑的点在于:如果IsDataProperty(p)为false,整个表达式结果已经是false,为什么不编译成短路逻辑与的&&?

原因很简单:VB.NET的And运算符本身就是非短路的逻辑与,它的行为是不管左侧表达式的结果是什么,右侧表达式都会被执行。而C#里的&(当操作数是bool类型时)就是对应的非短路逻辑与,和VB的And行为完全一致。

如果你的VB代码原本想使用短路逻辑与(即左侧为false时跳过右侧执行),那应该用VB.NET的AndAlso运算符,对应的C#代码才会是&&。比如:

If IsDataProperty(p) AndAlso (p.Name.StartsWith("ref_") = False) Then
 ...
End If

这段代码反编译后就会得到你预期的:

if (this.IsDataProperty(p) && !p.Name.StartsWith("ref_")) {
...
}

内容的提问来源于stack exchange,提问作者AngryHacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:21:03