加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否存在`var`可能导致问题的实例?

发布时间:2020-12-16 00:16:27 所属栏目:百科 来源:网络整理
导读:我从 this question知道var i = 1和int i = 1在IL中完全相同.编译器只是在编译时将var替换为实际类型.但是,是否存在var可能导致问题行为的任何实例(可能编译器猜测错误的类型?) 解决方法 我不相信编译器会猜错类型.但是,它可能会推断出您不想??要的类型,但
我从 this question知道var i = 1和int i = 1在IL中完全相同.编译器只是在编译时将var替换为实际类型.但是,是否存在var可能导致问题行为的任何实例(可能编译器猜测错误的类型?)

解决方法

我不相信编译器会猜错类型.但是,它可能会推断出您不想??要的类型,但这并不相同.

考虑完全合法

decimal foo = 10;
decimal bar = 4; 
decimal baz = foo / bar;

在代码中,baz非常明显是2.5.整数文字将在存储之前转换为小数,然后数学发生在十进制值上.删除显式输入,结果不同.

var foo = 10;
var bar = 4;
var baz = foo / bar;

现在所有关于int和baz的都是2,因为现在数学是用整数进行的.

所以,是的,如果你将var引入之前的代码,理论上可以改变代码语义.所以关键是要了解什么类型的推断实际上与你的代码有关,如果你想要一些小数(或任何特定的类型X),请以这样的方式声明它.对于类型推断,那就是

var foo = 10m;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读