C# - var在for循环中表现不如预期

时间:2014-10-16 21:14:11

标签: c# for-loop long-integer var

我发现使用“var”导致意外结果的情况。

在下面的代码中,我希望将X声明为数据类型“long”。

为什么X被声明为数据类型“int”? (在这种情况下导致无限循环)

long maxNumber = (long)int.MaxValue + 1;
long count = 0;

for (var X = 0; X < maxNumber; X++)
{
    count++;
}

2 个答案:

答案 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