如何解决类型推断在几种声明情况下不起作用
为什么以下陈述是完全有效的
string a = "someString",b = a,c = a;
但是这个不能编译
var a = "someString",c = a;
如果
var i = 2,j = 3.4;
编译器更难“消化”(即使在那里我也没有看到将一个识别为 int 而另一个识别为 double 的问题),但是
var a = "someString",b = a;
应该更加明确,因为:
var a = "someString",// here 'a' is inferred to 'string'
所以下面
b = a;
也应该被推断为字符串,因为 a
已经定义了它的类型...
解决方法
TLDR:消除此功能是 C# 编译器团队的设计决定。
如您所见,IntelliSense 已经为您提供了一个错误:
CS0819:隐式类型的变量不能有多个声明符。
该消息表明 IntelliSense(当然还有 IntelliSense 从中获取所有智能的 C# 编译器)完全了解这种情况并且不允许这样做。
为什么我说它完全了解情况?
使用 var
声明变量就是我们所说的“隐式声明变量的类型”。 “有多个声明符”是做出像 TypeName a = i,b = j
这样的声明。因此,var a = "someString",b = a;
(以及您分享的类似片段)可以准确地描述为“使用具有隐式类型的多个声明符”。
所以 C# 明确地说:“我知道你想做什么,但你不能”。但为什么?
原因不是类型系统的固有限制之一。这实际上根本不是技术原因。原因是由于设计决策被描述为对 Eric Lippert 提到的问题的回答:https://stackoverflow.com/a/4950600/10560397
埃里克试图说,因为在某些情况下试图推断 var
后面的内容时可能存在歧义,他们决定完全 消除了使用隐式类型进行多个声明的能力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。