【问题标题】:Value of type String cannot be converted into 1 dimensional array of StringString 类型的值不能转换为 String 的一维数组
【发布时间】:2015-11-19 20:10:22
【问题描述】:

这就是我声明代码的方式:

Dim startline As String
Dim curserline As String
Dim curserpos As Integer
Dim x As Integer
Dim back As Boolean = False
Dim word() As String
Dim word1() As String

Dim AutoComplete As New List(Of String)


"This is part of my code but am not going to share all of it. I assume your getting."

 word1 = sr.ReadLine.Split("|"c)

 word = word1

 AutoComplete.Add(word(0) & word(1))


"For starters, I am getting this error here:"

Value of type String cannot be converted into 1 dimensional array of String

"From here:"


 word = Mid(RichTextBox1.Text, curserpos + 1, RichTextBox1.SelectionStart - curserpos)


"And here:"


 If auto.StartsWith(word) = True And word <> "" And word <> " " Then


"From this code here:"



Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged



    Try

        ListView1.Visible = False
        ListView1.Items.Clear()



        startline = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart)
        curserline = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart)
        curserpos = RichTextBox1.SelectionStart



        While Mid(RichTextBox1.Text, curserpos, 1) <> vbTab And Mid(RichTextBox1.Text, curserpos, 1) <> " " And Mid(RichTextBox1.Text, curserpos, 1) <> "." And Mid(RichTextBox1.Text, curserpos, 1) <> "=" And Mid(RichTextBox1.Text, curserpos, 1) <> "(" And Mid(RichTextBox1.Text, curserpos, 1) <> ")" And Mid(RichTextBox1.Text, curserpos, 1) <> "," And Mid(RichTextBox1.Text, curserpos, 1) <> "&" And Mid(RichTextBox1.Text, curserpos, 1) <> "{" And Mid(RichTextBox1.Text, curserpos, 1) <> "}" And Mid(RichTextBox1.Text, curserpos, 1) <> """" And Mid(RichTextBox1.Text, curserpos, 1) <> "<" And Mid(RichTextBox1.Text, curserpos, 1) <> ">" And Mid(RichTextBox1.Text, curserpos, 1) <> "!" And curserline = startline



            curserpos -= 1
            curserline = RichTextBox1.GetLineFromCharIndex(curserpos)
        End While


        If curserline = startline Then
            word = Mid(RichTextBox1.Text, curserpos + 1, RichTextBox1.SelectionStart - curserpos)
        Else
            word = Mid(RichTextBox1.Text, curserpos + 2, RichTextBox1.SelectionStart - curserpos - 1)
        End If

请大家帮忙!这是一个 VB.NET 问题,我正在尝试构建自动完成功能。但是该主题中显示的错误正在使我的生活成为人间地狱。请帮助伙计们!

我刚刚添加的代码:

   For Each auto As String In AutoComplete

            If auto.StartsWith(word) = True And word <> "" And word <> " " Then

这里是sr。请部分:

    Try
        Dim output As String = "C:\Users\Acer\Documents\Visual Studio 2010\Projects\WindowsApplication3\WindowsApplication3\My Project\Grammarchecker1.txt"


        If File.Exists(output) Then
            Using sr As New StreamReader(output)
                While Not sr.EndOfStream
                    word1 = sr.ReadLine.Split("|"c)

                    word = word1

                    AutoComplete.Add(word(0).ToString & word(1).ToString)


                End While
            End Using
        End If

【问题讨论】:

  • 你看到那条大长线了吗?您可以使用Dim specialCharacters As String = vbTab &amp; " .=(),&amp;{}""&lt;&gt;!"(下一行)While curserline = startline AndAlso specialCharacters.IndexOf(Mid(RichTextBox1.Text, curserpos, 1)) = -1 来简化它。
  • 谢谢,让我继续努力,我会尽快回复您。
  • 您能否编辑您的问题,为我们提供您正在使用sr 阅读的文件中的三到四个示例行?
  • 我已经用你的代码更新了长行。请提供更多帮助!
  • 如果您不提供完整代码,您希望人们如何帮助您? - 我花了几个小时试图在另一个用户名下从您的帖子中整理出相同的代码,而您从未解释过您发送给我的代码不是整个代码。不是专业人士。

标签: arrays vb.net


【解决方案1】:

问题出在这一行:

word = Mid(RichTextBox1.Text, curserpos + 1, RichTextBox1.SelectionStart - curserpos)

您已经在这一行将word 声明为字符串的数组

Dim word() As String '<-- the word() with the parens means it's an array of strings, not a single String.

Mid 函数返回一个单个字符串,而不是字符串数组。您应该将其分配给您声明为类型String 的另一个变量:

Dim singleWord As String = Mid(RichTextBox1.Text, curserpos + 1, RichTextBox1.SelectionStart - curserpos)

【讨论】:

  • 感谢您努力学习编程。但是我觉得也会给我刚刚添加的代码带来各种错误
  • 我不明白你的意思。这似乎是一个不同的问题。
  • 不,我只是说,程序的许多部分都使用了“单词”这个词。你应该等两分钟才能看到我的调整。
  • 请尽可能提供帮助。我看你有这方面的专长。
  • 我需要有人帮助我。我处于绝望的境地。
【解决方案2】:

字符串列表是一个数组。我认为如果您要添加字符串列表,例如

  AutoComplete.Add(word(0).toString & word(1).toString )

然后您可以通过

解析您的数组
    Dim Starts_with As String = "0"
    For Each word In AutoComplete
        If word.StartsWith("D") Then
            Starts_with = word
        End If
    Next

【讨论】:

  • 这里是在封闭范围内使用单词:AutoComplete.Add(word(0).toString & word(1).toString)
  • @codeMonger123 您应该将控制变量名称更改为 word 以外的名称,因为它在其他地方使用。
  • 同意变量名称会影响我阅读代码的方式。
  • 但是你的代码说“单词”是在你用 .ToString 括起来的封闭变量中推断出来的?
  • 好的,安德鲁,我会的。
【解决方案3】:

您对变量的使用似乎过于节俭。您无需尝试尽可能少地使用 - 这只会导致问题。

例如,您读取数据的代码可能更像

Dim inputFile As String = "C:\Users\Acer\Documents\Visual Studio 2010\Projects\WindowsApplication3\WindowsApplication3\My Project\Grammarchecker1.txt"

If File.Exists(inputFile) Then
    Using sr As New StreamReader(inputFile)
        While Not sr.EndOfStream
            Dim wordParts = sr.ReadLine.Split("|"c)
            If wordParts.Count >= 2 Then
                AutoComplete.Add(wordParts(0) & wordParts(1))
            End If
        End While
    End Using
Else
    Throw New FileNotFoundException(String.Format("Input file {0} not found.", inputFile))
End If

请注意我如何将输入文件命名为inputFile 而不是output,并将单词的部分命名为wordParts。处理不再使用的变量将由您处理,如果这是您所关心的。另外,我检查以确保至少有两个由“|”分隔的条目否则wordParts(1) 将不存在,因此会引发异常。

如果文件不存在也可能无关紧要,在这种情况下删除Throw New FileNotFoundException(String.Format("Input file {0} not found.", inputFile)) 行。

【讨论】:

  • 这里怎么样:Dim wordParts = sr.ReadLine.Split("|"c) 我知道你已经很好地声明了它,但是其他部分包含了声明,并且要求 wordParts 是因为他们需要它来执行其他功能!
  • 顶部声明是其他变量使用它的问题,而不仅仅是表单加载事件。 RichTextBox 有一些需要 WordParts 的代码。
  • @KelvinN。填充列表AutoComplete 应该与代码的其他部分无关。我希望你没有重命名变量wordword1,因为那是错误的。变量wordParts 用于读取文件。另外,我非常怀疑您不应该将 wordword1 声明为数组。
  • 我已经删除了它们,您的代码正在运行百分之百感谢您!您太棒了,伟大的牧羊人**
  • 我忘了提到我正在使用 ListView 的一件事,它似乎填充在一侧,它也应该填充在其他列上。你能通过重新访问你的代码来帮助解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多