【问题标题】:Variable 'Name' is used before it has been assigned a value变量“名称”在被赋值之前使用
【发布时间】:2013-04-28 11:28:22
【问题描述】:

你好,我想聊天,我在互联网上搜索,我终于找到了一些可能有用的东西。但现在我在名称上收到一个错误,它说在分配值之前使用了变量名称

代码:

Public Sub findForm1()

    If Trim(Mid(My.Forms.Private1.Text, My.Forms.Private1.Text.Length - 2)) = formNo Then
        My.Forms.Private1.RichTextBox1.Text = My.Forms.Private1.RichTextBox1.Text & poruka + vbCrLf

    ElseIf Trim(Mid(My.Forms.Private2.Text, My.Forms.Private2.Text.Length - 2)) = formNo Then
        My.Forms.Private2.RichTextBox1.Text = My.Forms.Private2.RichTextBox1.Text & poruka + vbCrLf

    Else
        If My.Forms.Private1.Visible = False Then
            Dim name As String
            For i As Integer = 1 To poruka.Length
                If Mid(poruka, i, 2) = ": " Then
                    Exit For

                    name = name & Mid(poruka, i, 1)
                End If
            Next
            My.Forms.Private1.Show()
            My.Forms.Private1.Text = Trim(name) & "   " & br
            My.Forms.Private1.RichTextBox1.Text = My.Forms.Private1.RichTextBox1.Text & poruka + vbCrLf
        Else
            Dim name As String
            For i As Integer = 1 To poruka.Length
                If Mid(poruka, i, 2) = ": " Then
                    Exit For
                End If
                name = name & Mid(poruka, i, 1)
            Next
            My.Forms.Private2.Show()
            My.Forms.Private2.Text = Trim(name) & "   " & br
            My.Forms.Private2.RichTextBox1.Text = My.Forms.Private2.RichTextBox1.Text & poruka + vbCrLf
        End If
    End If

    formNo = Nothing
    poruka = Nothing

End Sub

我该如何解决这个错误? 我已经尝试移动结束 if 并将其他一些更改为结束 if。 但仍然没有找到正确的代码 PLEAS HELP.

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    是的,编译器完全正确。您的代码中的问题可以归结为以下内容:

    Dim name as String
    name = name & "Foo"
    

    您正在尝试将 name 的 当前 值与另一个字符串 ("Foo") 连接 - 但 name 还没有 值.

    你可以改成:

    Dim name as String = ""
    name = name & "Foo"
    

    ...但您最好使用StringBuilder。例如,您的第一个循环可能是:

    Dim nameBuilder As StringBuilder = New StringBuilder()
    For i As Integer = 1 To poruka.Length
        If Mid(poruka, i, 2) = ": " Then
            Exit For
    
            nameBuilder.Append(Mid(poruka, i, 1))
        End If
    Next
    My.Forms.Private1.Show()
    My.Forms.Private1.Text = Trim(nameBuilder.ToString()) & "   " & br
    

    【讨论】:

    • 哈哈谢谢我已经解决了这个问题,但你已经向我解释过了。我尝试的是 dim name as string = nothing 并且它起作用了我不知道为什么但它直到现在才起作用 XD
    【解决方案2】:

    问题是有几种情况可能导致您的变量永远不会被初始化。要修复,只需提供一个默认值,例如

    Dim Name As String = ""
    

    另外,您要重新声明同一个变量两次,您只需要这样做一次,如果您需要它为下一个循环“空白”或使用 2 个单独的变量(即更具体地命名),只需再次清除它) 代替。

    【讨论】:

    • 你的意思是"",而不是''。而且它不仅仅是循环结束 - 还有 within 循环。
    • @JonSkeet 是的,在我发布后,我意识到,在我的通用移动设备上 :) 我更新为更通用,因为我没有注意到它也在 for 之外使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2014-06-08
    • 2019-01-16
    • 2020-11-13
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多