我发现使用“var”导致意外结果的情况。
在下面的代码中,我希望将X声明为数据类型“long”。
为什么X被声明为数据类型“int”? (在这种情况下导致无限循环)
long maxNumber = (long)int.MaxValue + 1;
long count = 0;
for (var X = 0; X < maxNumber; X++)
{
count++;
}
答案 0 :(得分:4)
你为什么期待
var X = 0;
推断数据类型long
?
var
变量的类型推断仅查看初始值的类型。它没有考虑使用。
其他人告诉你如何使用后缀来控制0
的类型。我说,如果你想要一个特定的类型,请继续写下
long X = 0;
这并不是var
的最佳选择。类型推断主要用于难以命名的类型(IEnumerable<KeyValuePair<string, Converter<TreeViewNode, IEnumerable<TreeViewNode>>>>
任何人?)或者根本不能命名,或者如果您希望类型自动更改以匹配返回某些其他功能的类型。积分循环计数器不会受益。
答案 1 :(得分:3)
var X = 0
这是声明X类型的行,无论它以后如何使用。指定不带任何后缀的数字文字时,它将是一个整数。这是一个可能的解决方案。
var X = 0L