C#-var在for循环中的行为与预期不符

本文关键字:for 循环 C#-var | 更新日期: 2023-09-27 18:26:53

我发现使用"var"会导致意外结果。

在下面的代码中,我期望X被声明为数据类型"long"。

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

long maxNumber = (long)int.MaxValue + 1;
long count = 0;
for (var X = 0; X < maxNumber; X++)
{
    count++;
}

C#-var在for循环中的行为与预期不符

您为什么期望

var X = 0;

以推断数据类型long

var变量的类型推断只关注初始值的类型。它不考虑用法。

其他人会告诉你如何控制带有后缀的0的类型。我说,如果你想要一个特定的类型,继续写

long X = 0;

这并不是var的最佳选择。类型推理主要针对难以命名的类型(IEnumerable<KeyValuePair<string, Converter<TreeViewNode, IEnumerable<TreeViewNode>>>>任何人?)或根本无法命名的类型,在匿名类型的情况下,或者如果您希望类型自动更改以匹配其他函数的返回类型。积分循环计数器根本没有好处。

var X = 0

这一行声明了X的类型,不管以后如何使用它。当您指定一个没有任何后缀的数字文字时,它将是一个整数。这里有一个可能的解决方案。

var X = 0L