Tom*_*len 8 c# methods formatting braces
public void Finalise()
ProcessFinalisation(true);
Run Code Online (Sandbox Code Playgroud)
不编译,但正确的版本:
public void Finalise()
{
ProcessFinalisation(true);
}
Run Code Online (Sandbox Code Playgroud)
编译好(当然).
如果以下代码只有一行,如果我没有括号,我被允许:
if(true)
CallMethod();
Run Code Online (Sandbox Code Playgroud)
具有以下一行的方法为什么不允许相同?有技术原因吗?
Mar*_*ell 14
显而易见的答案是语言规范; 为了推理...我猜主要是简单 - 它只是不值得理智的检查规则和编译器的开销,只需极少量的单语句方法.特别是,我可能会看到通用约束等问题(即where T : IBlah, new()签名结束时).
请注意,不使用大括号有时会导致含糊不清,在某些地方不赞成.我比个人更务实,但每个都是他们自己的.
如果没有明确的括号,剃刀内的C#也不允许使用它也可能是有意义的.完全(即使是if等等).
Eri*_*ert 11
马克基本上是对的.为了扩展他的答案:有很多地方C#需要一个支撑语句块,而不是允许"裸"语句.他们是:
在每种情况下,都可以为单个无支撑语句合法的特征提出明确的语法(或启发式歧义歧义语法).但重点是什么呢?在每种情况下,您都希望看到多个陈述; 单一陈述是罕见的,不太可能的情况.对于这些非常不可能的情况,似乎并不值得让语法明确无误.
从 C# 6.0 开始,您可以声明:
void WriteToConsole(string word) => Console.WriteLine(word)
Run Code Online (Sandbox Code Playgroud)
然后像往常一样调用它:
public static void Main()
{
var word = "Hello World!";
WriteToConsole(word);
}
Run Code Online (Sandbox Code Playgroud)