C# Return(null)而不是returnnull-为什么使用括号?

C# Return(null)而不是returnnull-为什么使用括号?,c#,.net,C#,.net,我正在查看一些MSDN文档,示例代码列出了以下方法: public XmlSchema GetSchema() { return(null); } returnnull和return(null)之间有语义上的区别吗,即它调用了一些编译器优化,还是纯粹的风格上的差异 returnnull和return(null) 总的来说,没有任何区别。在这种情况下,括号是多余的 它会调用一些编译器优化吗 一点也不 这纯粹是一种风格吗 最有可能的是,该示例来自自动生成的代码。在这种情况下,当生成任意表达

我正在查看一些MSDN文档,示例代码列出了以下方法:

public XmlSchema GetSchema()
{
    return(null);
}
returnnull
return(null)
之间有语义上的区别吗,即它调用了一些编译器优化,还是纯粹的风格上的差异

returnnull
return(null)

总的来说,没有任何区别。在这种情况下,括号是多余的

它会调用一些编译器优化吗

一点也不

这纯粹是一种风格吗

最有可能的是,该示例来自自动生成的代码。在这种情况下,当生成任意表达式时,生成器不知道该表达式将在哪个上下文中使用。因此,保护原始意图最简单的方法是将生成的表达式包装到括号中。这确保它在其周围的上下文中被理解为“原子子表达式”

假设生成器将输出
a+b
,调用者需要将其乘以
c
。错误的方法是将
a+b
*c
连接起来,导致
a+b*c
,这显然是错误的。但是,当嵌套生成器返回
(a+b)
时,整个构造将按预期工作,而无需任何复杂的决策:
(a+b)*c


请注意,现代代码生成器通常使用多通道处理的表达式树,而不是传递字符串,因此它们更容易消除多余的括号,使结果更易于我们人类阅读。

无差异,无编译器优化


另请参见,例如,作为一般规则,如果两个语句在语义上是等价的(但在语法上是不同的),则任何适当的编译器都将对这两个语句应用相同的优化。因为C#没有指定
返回null的含义之间的任何差异
返回值(空),,任何假设的编译器优化都适用于其中一个,而另一个也适用。

为什么我们比你更了解作者为什么添加了多余的一组括号?也许作者使用的语言是
return
作为一种方法?@DLeh:如果微软让某人从somone编写文档,我会感到惊讶“谁不熟悉这种语言呢?”蒂姆施梅尔特我也会是:P。半开玩笑的回答。我没有意识到你可以有一个
返回值
,后面没有空格,它看起来确实像这样一个方法。@PhilipPittle:编译器优化与你使用的语法无关,否则这显然是一个编译器错误。你认为这个MSDN代码示例是自动生成的吗?@JLRishe是的,可能是。可能只是有问题的方法,它可能是由IDE特性自动生成的,帮助开发人员实现
IXmlSerializable