【问题标题】:Variable declaration inside a loop doesn't reset it's value [duplicate]循环内的变量声明不会重置它的值[重复]
【发布时间】:2018-08-14 13:12:56
【问题描述】:

我一直认为在 VB.NET 中声明变量会自动将此变量设置为其数据类型的默认值(与 C# 不同)。

那么,之后

  • Dim intValue As IntegerintValue为0
  • Dim dateValue As Date dateValue 是 1/1/0001
  • Dim stringValue As String stringValueNothing
  • Dim strValue As PointstrValue 是 (0; 0)

等等。

但是现在我在循环中声明了一个变量,并且惊讶地发现尽管重复声明该变量保持了它的值。所以,

For index As Integer = 1 To 10
    Dim test As Integer

    test += 1

    Console.WriteLine(test)
Next index

输出从 1 到 10 的数字,而不是输出 1 的十倍。

有人能解释一下为什么吗?这是一个错误还是应该这样工作?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    文档说:

    Visual Basic 每次运行Dim 语句时都会将指定的值赋给变量。如果不指定初始值,Visual Basic 会在首次输入包含Dim 语句的代码时为变量的数据类型分配默认初始值

    见:https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/variables/how-to-create-a-new-variable

    【讨论】:

    • 请不要只发布链接答案。一般来说,您根本没有回答 OP 问题,而是将答案推迟到其他地方。
    • @Codexer - 不,那不是真的。我的答案在没有链接的情况下是独立的。我已将文档中的相关段落直接包含在答案中,并且我仅链接以支持佐证。
    • 在循环的上下文中,这是一个非常令人惊讶的行为。 ://
    【解决方案2】:

    我谦虚地建议你试试这个:

    Dim yourVariable as Integer = 0
    

    或者根据您的工作环境将零替换为任何一致的空值。

    【讨论】:

    • 但是,当变量超过声明它的块时,只在它使用的块(循环)内声明一个变量有什么好处呢?我宁愿在过程级别声明变量,然后在循环中重置它,如果我必须重置它。
    • 也许我没有明白你想要做什么。 VB.NET 将只运行一次声明,但如果您在进行声明时为一个值赋值,VB.NET 将在循环的每次迭代中进行归因,即使它没有重新声明变量。这就是为什么您每次都得到 1 到 10 而不仅仅是 1 的原因。如果同时声明和属性变量,每次迭代都会得到 1。
    猜你喜欢
    • 2014-06-15
    • 2015-11-30
    • 1970-01-01
    • 2015-08-31
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2018-10-11
    相关资源
    最近更新 更多