pha*_*unk 0 c# vb.net if-statement language-comparisons
当编译器看到THEN...END IF
(在Vb中)和{ ... }
(在C#中)看起来像是分隔If
语句时,编译器是否看到相同的东西.
如果以相同的方式对待它们,为什么我可以在C#中执行此操作:
if(true)
int x = 1;
//Instead of
if(true)
{
int x = 1;
}
Run Code Online (Sandbox Code Playgroud)
但不是在VB中:
//Won't Compile
if(true)
x As Integer = 1
//Instead Of
if(true) then
x As Integer = 1
End If
Run Code Online (Sandbox Code Playgroud)
C#和VB.NET是两种不同的语言,具有不同的语法规则.一种语言中的规则与另一种语言中的类似规则之间没有一对一的映射.
THEN和END IF是语义相同的if语句的大括号(即它们的意思是一样的),但是VB.NET语法不允许他们被ommitted.
顺便说一句:你的样本相当糟糕,因为在特殊情况下,即使在C#中你也不能省略花括号.
在解析语句时,C#和vb.net有不同的规则.VB.net派生自QuickBasic,它源自Microsoft BASIC解释器,其中带有错误条件的IF/THEN语句将导致解释器跳到行结束或ELSE语句(以先发生者为准).因为将所有语句都置于与该语句相同的行上的IF语句中有点烦人,QuickBasic的设计使得如果一行包含IF/THEN,ELSEIF/THEN或ELSE但没有其他语句,执行将跳到下一个相应的ELSEIF,ELSE或ENDIF.
虽然VB语法有点特别,但实际上它的效果非常好.在两种语言中可能都不错的一件事是一个声明,其明确定义的目的是开始一个变量范围块.在vb.net中,可以说:
If True Then ' Scoping block
Dim SB As New System.Text.StringBuilder()
...
End If
Run Code Online (Sandbox Code Playgroud)
但这似乎有点icky.在C#中为此目的单独使用大括号的能力可能会被视为该语言的"胜利",但是如果没有评论,那么在阅读代码时,大括号的目的是作为变量作用域,这一点并不清楚.阻止,而不是将某些应该有条件地或重复地执行的语句分组,而不是出于任何原因"丢失"它们的控制语句.
归档时间: |
|
查看次数: |
539 次 |
最近记录: |