gpt4 book ai didi

c# - return myVar 与 return (myVar) 之间有区别吗?

转载 作者:IT王子 更新时间:2023-10-29 03:37:37 26 4
gpt4 key购买 nike

我在查看一些示例 C# 代码时,注意到一个示例将返回值包装在 () 中。

我总是刚刚完成:

return myRV;

有区别吗:

return (myRV);

最佳答案

更新:这个问题是 the subject of my blog on 12 April 2010 .感谢您提出有趣的问题!

在实践中,没有区别。

理论中可能存在差异。 C# 规范中存在三个有趣的点,这可能会带来差异。

首先,将匿名函数转换为委托(delegate)类型和表达式树。请考虑以下事项:

Func<int> F1() { return ()=>1; }
Func<int> F2() { return (()=>1); }

F1 显然是合法的。是 F2 吗?从技术上讲,没有。 The spec在第 6.5 节中说存在从 lambda 表达式 到兼容委托(delegate)类型的转换。那是 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)"不是文字零,它是一个括号后跟文字零,然后是括号。我们违反了此处的规范,实际上允许任何编译时常量表达式等于零,而不仅仅是字面上的零。

因此,在任何情况下,我们都允许您逍遥法外,即使从技术上讲这样做是违法的。

关于c# - return myVar 与 return (myVar) 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com