我在IXmlSerializable上查看了一些MSDN文档,示例代码列出了以下方法:
public XmlSchema GetSchema()
{
return(null);
}
return null
和return (null)
之间是否存在语义差异,即它是否会调用某些编译器优化,还是纯粹的风格?
答案 0 :(得分:4)
之间是否存在语义差异?
return null
和return (null)
作为一个整体陈述,没有任何区别。在这种情况下,括号是多余的。
是否会调用一些编译器优化
完全没有。
纯粹是文体吗?
最有可能的例子来自自动生成的代码。在这种情况下,当生成任意表达式时,生成器不知道将在哪个上下文中使用表达式。因此,保护原始意图最简单的方法是将生成的表达式包装到括号中。这可以确保它被理解为周围环境中的“原子子表达式”。
考虑生成器输出a+b
,调用者需要将其乘以c
。错误的方法是明确地连接a+b
和*c
导致a+b*c
这显然是错误的。但是,当嵌套生成器返回(a+b)
时,整个构造按预期工作而不做任何复杂的决策:(a+b)*c
。
请注意,现代代码生成器通常使用多遍处理而不是传递字符串来处理表达式树,因此它们更容易消除多余的括号,使得我们人类的结果更具可读性。
答案 1 :(得分:1)
没有区别,没有编译器优化。
参见例如Does using parentheses around return values provide any compiler-related benefits?
答案 2 :(得分:1)
作为一般规则,如果两个语句在语义上等效(但语法上不同),任何适当的编译器都会将相同的优化应用于它们的两个。由于C#没有指定return null;
和return(null);
的含义之间的任何差异,因此任何适用于一个的假设编译器优化都适用于另一个。