Return (null) 而不是 return null - 为什么要加括号?
Return (null) instead of return null - why parenthesis?
我正在查看有关 IXmlSerializable 的一些 MSDN 文档,示例代码列出了以下方法:
public XmlSchema GetSchema()
{
return(null);
}
return null
和 return (null)
之间是否存在语义差异,即它调用了一些编译器优化,还是纯粹的风格?
Is there a semantic difference between return null
and return (null)
从整体上看,没有任何区别。在这种情况下,括号是多余的。
does it invoke some compiler optimization
完全没有。
is it purely stylistic?
该示例很可能来自自动生成的代码。在这种情况下,当生成任意表达式时,生成器不知道表达式将在哪个上下文中使用。因此,保护原始意图的最简单方法是将生成的表达式包装在括号中。这确保它在其周围上下文中被理解为 'atomic subexpression'。
考虑生成器将输出 a+b
并且调用者需要将其乘以 c
。错误的方法是直接连接 a+b
和 *c
导致 a+b*c
,这显然是错误的。但是,当嵌套生成器 returns (a+b)
时,整个结构按预期工作,没有任何复杂的决策:(a+b)*c
.
请注意,现代代码生成器通常使用多通道处理来处理表达式树,而不是四处传递字符串,因此它们更容易消除多余的括号,从而使结果更易于我们人类阅读。
没有区别,没有编译器优化。
另见例如Does using parentheses around return values provide any compiler-related benefits?
作为一般规则,如果两个语句在语义上相同(但在句法上不同),任何适当的编译器都会对它们 both 应用相同的优化。由于 C# 未指定 return null;
和 return(null);
的含义之间的任何区别,因此适用于一个的任何假设编译器优化也将适用于另一个。
我正在查看有关 IXmlSerializable 的一些 MSDN 文档,示例代码列出了以下方法:
public XmlSchema GetSchema()
{
return(null);
}
return null
和 return (null)
之间是否存在语义差异,即它调用了一些编译器优化,还是纯粹的风格?
Is there a semantic difference between
return null
andreturn (null)
从整体上看,没有任何区别。在这种情况下,括号是多余的。
does it invoke some compiler optimization
完全没有。
is it purely stylistic?
该示例很可能来自自动生成的代码。在这种情况下,当生成任意表达式时,生成器不知道表达式将在哪个上下文中使用。因此,保护原始意图的最简单方法是将生成的表达式包装在括号中。这确保它在其周围上下文中被理解为 'atomic subexpression'。
考虑生成器将输出 a+b
并且调用者需要将其乘以 c
。错误的方法是直接连接 a+b
和 *c
导致 a+b*c
,这显然是错误的。但是,当嵌套生成器 returns (a+b)
时,整个结构按预期工作,没有任何复杂的决策:(a+b)*c
.
请注意,现代代码生成器通常使用多通道处理来处理表达式树,而不是四处传递字符串,因此它们更容易消除多余的括号,从而使结果更易于我们人类阅读。
没有区别,没有编译器优化。
另见例如Does using parentheses around return values provide any compiler-related benefits?
作为一般规则,如果两个语句在语义上相同(但在句法上不同),任何适当的编译器都会对它们 both 应用相同的优化。由于 C# 未指定 return null;
和 return(null);
的含义之间的任何区别,因此适用于一个的任何假设编译器优化也将适用于另一个。