gma*_*ser 6 .net c# visual-studio-2010
我正在查看C#中的代码示例.有;没有收到任何声明.我以为这是错字.我试着编译;.它汇编得很好.有什么用的;,没有任何代码语句?
我正在使用VS 2010,C#和.Net 4.0
private void CheckSmcOverride(PatLiverSmc smc)
{
;
if (smc.SmcOverride && smc.Smc != null
&& smc.Smc.Value < LiverSmcConst.SMC_OVERRIDE_POINT)
{
smc.Smc = 10;
_logger.DebugFormat("CheckSmcOverride: Override SMC {0}", smc.Smc);
}
}
Run Code Online (Sandbox Code Playgroud)
new*_*rey 13
C#中的分号只是表示一个结尾的语句.空语句或仅仅是单独的语句;是有效的.
您可以在C#中的任何函数内单独使用以下行,它应该可以正常编译:
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
Run Code Online (Sandbox Code Playgroud)
在同一主题上,但与手头的问题半不同,是一组空的花括号,{ }.这些表示"代码块",但在代码中的任何位置都有效.同样,你可以在一行中拥有类似下面的东西,它仍然可以正常编译:
{ } { ;;;;;;;;;; } { }
Run Code Online (Sandbox Code Playgroud)
最后,空语句和空代码块全部编译为"没有什么可以看到这里的人,移动",并且在大多数情况下,可以从代码中删除而没有后果.
作为ac#developer我使用'空语句'
;
Run Code Online (Sandbox Code Playgroud)
(作为评论要求的有用案例)
当我有一个多行lambda,我想检查最后一行评估,即
list.ForEach(x=>
{
x.result = x.Value * x.AnotherValue;
; // otherwise I can't ever see these as you can't break on the end brace of an anonymous function
})
Run Code Online (Sandbox Code Playgroud)
作为一种在评估之前的一些代码中断点的方法,即
void SomeFunct()
{
int a = someOtherFunct();
; //I want a breakpoint here but...
//there is some huge code segment that will get skipped before I can breakpoint
}
Run Code Online (Sandbox Code Playgroud)
这是一个什么都不做的声明.通常情况下,这将是毫无意义的,可能只是被删除,但有时会有一个声明,你真的不想发生任何事情.
有时你看到这个循环导致副作用,所以不需要身体:
int count = 0;
while(isTheRightNumber(count++))
;
Run Code Online (Sandbox Code Playgroud)
我个人不喜欢这样的代码示例,并且不鼓励这种做法,因为它们往往比具有副作用的自由条件的循环更难理解.使用一组空括号更清晰,包括相关注释,例如:
int count = 0;
while(isTheRightNumber(count++))
{ } //empty by design
Run Code Online (Sandbox Code Playgroud)
另一个例子是使用for循环进行无限循环的模式:
for(;;)
{
//stuff
}
Run Code Online (Sandbox Code Playgroud)
基本上与以下相同:
while(true)
{
//stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |