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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |