aar*_*ona 46 c# declaration implicit-typing variable-declaration
鉴于以下内容:
// not a problem
int i = 2, j = 3;
Run Code Online (Sandbox Code Playgroud)
这让我感到惊讶:
// compiler error: Implicitly-typed local variables cannot have multiple declarators
var i = 2, j = 3;
Run Code Online (Sandbox Code Playgroud)
不编译.也许有一些我不明白的事情(这就是我问这个的原因)?
但为什么编译器不会意识到我的意思:
var i = 2;
var j = 3;
Run Code Online (Sandbox Code Playgroud)
哪个会编译.
Eri*_*ert 59
当我们设计这个功能时,我向社区询问了什么
var x = 1, y = 1.2;
Run Code Online (Sandbox Code Playgroud)
应该意味着.问答在这里:
简而言之,大约一半的回复者表示明显正确的做法是让x和y都加倍,大约一半的回复者说明显正确的做法是让x int和y加倍.
(语言委员会指出它应该是"双"的,我实际上在我们出货之前很久就实现了代码.我们使用与隐式类型数组相同的类型推理算法,其中所有表达式必须可转换为最佳元素类型.)
当你的一半客户认为一件事"显然是正确的"而另一半人认为相反的情况"显然是正确的"时,你手上就会遇到很大的设计问题.解决方案是使整件事非法并避免问题.
Jam*_*unt 41
这只是程序员和编译器可能混淆的另一个问题.
例如,这很好:
double i = 2, j = 3.4;
Run Code Online (Sandbox Code Playgroud)
但是,这是什么意思?
var i = 2, j = 3.4;
Run Code Online (Sandbox Code Playgroud)
使用语法糖这种事情是一个无人问津的头疼 - 所以我怀疑你的情况会得到支持.它涉及太多的编译器试图有点太聪明.
因为如果这有效:
var i = 2, j = 3;
Run Code Online (Sandbox Code Playgroud)
因为这有效:
var i = 2;
var j = 3;
Run Code Online (Sandbox Code Playgroud)
然后你可能会期望这个工作:
var i = 2, j = "3";
Run Code Online (Sandbox Code Playgroud)
因为这有效:
var i = 2;
var j = "3";
Run Code Online (Sandbox Code Playgroud)
即使在James Gaunt提出的情况下,它们都是数字类型,并且可以存储在相同类型的值中,将i
是什么类型?:
var i = 2, j = 3.4;
Run Code Online (Sandbox Code Playgroud)
j
显然是一个double,但i
逻辑上可以是int或double,这取决于你如何期望var来推断类型.无论哪种方式实施,你都会与那些期望它以其他方式工作的人混淆.
为了避免所有这些混乱,它是完全不允许的.个人而言,我个人并不认为这是一个巨大的损失; 如果你想声明一个变量列表(这在我的工作经验中很少见),只需强烈输入em即可.
归档时间: |
|
查看次数: |
14966 次 |
最近记录: |