【问题标题】:C# - var not behaving as expected in for loopC# - var 在 for 循环中的行为不符合预期
【发布时间】: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 式的语义。一方面,我认为隐含的查询非常清楚。 (即,“有人可以解释一下吗?”)

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


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2020-12-25
      • 2021-12-07
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 2021-10-26
      相关资源
      最近更新 更多