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<KeyValuePair<string, Converter<TreeViewNode, IEnumerable<TreeViewNode>>>>
任何人?)或根本无法命名的类型,在匿名类型的情况下,或者如果您希望类型自动更改以匹配某些返回类型其他功能。积分循环计数器没有好处。
【讨论】:
【参考方案2】:var X = 0
这是声明 X 类型的行,不管它以后如何使用。当您指定没有任何后缀的数字文字时,它将是一个整数。这是一种可能的解决方案。
var X = 0L
【讨论】:
以上是关于C# - var 在 for 循环中的行为不符合预期的主要内容,如果未能解决你的问题,请参考以下文章