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

Posted

技术标签:

【中文标题】C# - var 在 for 循环中的行为不符合预期【英文标题】:C# - var not behaving as expected in for loop 【发布时间】:2014-12-12 09:17:24 【问题描述】:

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

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

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

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

for (var X = 0; X < maxNumber; X++)

    count++;

【问题讨论】:

您有问题吗? 如果您想回答自己的问题,这是规则允许的,但我会编辑,将其改写为问题,然后发布您的答案,并将其标记为已接受。跨度> var 的类型由声明推断。文字 0 是一个整数。因此,您的 var 是一个整数。编译器无法推断您稍后将如何使用var。如果你想要一个长的,你必须使用正确的文字0L @eddie_cat 很好的指导方针,但我们不必担心 Jeapordy 式的语义。一方面,我认为隐含的查询非常清楚。 (即,“有人可以解释一下吗?”) 【参考方案1】:

你为什么期待

var X = 0;

推断数据类型long?

var 变量的类型推断仅查看初始值的类型。它不考虑使用情况。

别人告诉你如何控制0的类型,带后缀。我说,如果您想要特定类型,请继续写

long X = 0;

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

【讨论】:

【参考方案2】:
var X = 0

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

var X = 0L

【讨论】:

以上是关于C# - var 在 for 循环中的行为不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

循环函数在 Java 类中的行为不符合预期

为啥将 VB.NET 代码迁移到 C# 时,for 循环的行为会有所不同?

闭包循环问题-for循环只显示最后一个i的值

c#基础语句——循环语句(forwhileforeach)

python中for循环删除不全的问题

JavaScript“for-in”循环中的“var”还是没有“var”?