我在看一些示例C#代码,并注意到一个示例将返回值包装在()中。
我一直都做:
return myRV;
执行上有区别吗?
return (myRV);
更新:此问题为the subject of my blog on 12 April 2010。感谢您提出有趣的问题!
实际上,没有区别。
在theory中可能有所不同。 C#规范中有三个有趣的地方,它们可能会有所不同。
首先,将匿名函数转换为委托类型和表达式树。考虑以下内容:
Func<int> F1() { return ()=>1; }
Func<int> F2() { return (()=>1); }
F1
显然是合法的。是F2
吗?从技术上讲,没有。 The spec在6.5节中说,存在从到兼容委托类型的转换。那是lambda表达式吗?否。它是一个括号括起来的表达式,其中包含一个lambda表达式。Visual C#编译器在这里犯了一个小小的规范冲突,并为您舍弃了括号。
第二:
int M() { return 1; }
Func<int> F3() { return M; }
Func<int> F4() { return (M); }
F3
是合法的。是F4
吗?否。第7.5.3节指出,带括号的表达式不能包含方法组。再次,为了您的方便,我们违反了规范并允许进行转换。
第三:
enum E { None }
E F5() { return 0; }
E F6() { return (0); }
,而不仅仅是文字零。所以在每种情况下,即使从技术上讲,这样做都是违法的,我们都允许您摆脱它。F5
是合法的。是F6
吗?否。规范指出,存在从文字零到任何枚举类型的转换。 “(0)
”不是立即数零,它是一个括号,后跟立即数零,然后是一个括号。我们在这里违反了规范,实际上允许任何编译时常量表达式等于零