我不相信编译器会猜错类型.但是,它可能会推断出您不想要的类型,但这并不相同.
考虑完全合法
decimal foo = 10;
decimal bar = 4;
decimal baz = foo / bar;
Run Code Online (Sandbox Code Playgroud)
在代码中,baz很明显会是2.5.整数文字将在存储之前转换为小数,然后数学发生在十进制值上.删除显式输入,结果不同.
var foo = 10;
var bar = 4;
var baz = foo / bar;
Run Code Online (Sandbox Code Playgroud)
现在一切都推断为int并且baz是2因为现在数学是用整数进行的.
所以,是的,如果你介绍var之前没有的地方,代码语义理论上可以改变.所以关键是要了解什么类型的推断实际上与你的代码有关,如果你想要一些小数(或任何特定的类型X),请以这样的方式声明它.对于类型推断,那就是
var foo = 10m;
Run Code Online (Sandbox Code Playgroud)