String Array Thing!

时间:2009-11-09 14:20:25

标签: vb.net arrays string

是的 - 首先,我正在进入不熟悉的领域 - 所以请善待!

我有一个看起来像这样的脚本:

Private Function checkString(ByVal strIn As String) As String
    Dim astrWords As String() = New String() {"bak", "log", "dfd"}
    Dim strOut As String = ""
    Dim strWord As String
    For Each strWord In astrWords
        If strIn.ToLower.IndexOf(strWord.ToLower, 0) >= 0 Then
            strOut = strWord.ToLower
            Exit For
        End If
    Next
    Return strOut
End Function

它的功能是检查输入字符串,看看是否有任何'astrWords'在那里,然后返回值。

所以我写了一些代码来动态创建这样的单词:

Dim extensionArray As String = ""
    Dim count As Integer = 0
    For Each item In lstExtentions.Items
        If count = 0 Then
            extensionArray = extensionArray & """." & item & """"
        Else
            extensionArray = extensionArray & ", ""." & item & """"
        End If
        count = count + 1
    Next
    My.Settings.extensionArray = extensionArray
    My.Settings.Save()

显然 - 它使用列表项创建相同的数组。该代码的输出与我对其进行硬编码完全相同 - 但是当我将代码的第一位更改为:     Dim astrWords As String()= New String(){My.Settings.extensionArray} 代替:     Dim astrWords As String()= New String(){“bak”,“log”,“dfd”} 它开始寻找整个语句而不是循环遍历每个语句?

我认为它与单词字符串末尾有括号有关 - 但我迷路了!

任何帮助表示赞赏:)

4 个答案:

答案 0 :(得分:2)

当您使用文字数组中的设置中的字符串时,就像您使用包含分隔字符串的单个字符串一样:

Dim astrWords As String() = New String() {"""bak"", ""log"", ""dfd"""}

您可能想要做的是在设置中放置逗号分隔的字符串,如"bak,log,dfd",然后您可以拆分它以将其作为数组:

Dim astrWords As String() = My.Settings.extensionArray.Split(","C)

答案 1 :(得分:0)

您需要将extensionArray设置为字符串数组,而不仅仅是字符串。 注意

Dim something as String  

...定义一个字符串,但

Dim somethingElse as String()  

...定义了一整套字符串。

我认为使用您的代码,您需要以下内容:

Dim extensionArray As String() = new String(lstExtensions.Items)
Dim count As Integer = 0
For Each item In lstExtentions.Items
    extensionArray(count) = item
    count = count + 1
Next
My.Settings.extensionArray = extensionArray
My.Settings.Save()

然后在checkString的开头你需要像

这样的东西
Private Function checkString(ByVal strIn As String) As String
    Dim astrWords As String() = My.Settings.extensionArray
    ...

如果Items有一个'ToArray()'方法,也可能有更简单的方法将lstExtentions.Items变成一个数组,但我不确定你在那里使用的是什么类型......

答案 2 :(得分:0)

您所做的是创建一个包含所有3个单词的字符串。您需要创建一个字符串数组。

New String() {"bak", "log", "dfd"}

表示创建一个包含3个字符串值“bak”,“log”和“dfd”的新字符串数组。

New String() {My.Settings.extensionArray}

表示创建一个新的字符串数组,其中只包含一个值,该值是extensionArray的内容。 (你已经设置为“”bak“,”log“,”dfd“”)。请注意,这是一个字符串,而不是字符串数组。你不能只用逗号创建一个字符串,你需要创建一个字符串数组。

如果要动态创建数组,则需要像下面这样定义:

Dim astrWords As String() = New String(3)

这将创建一个包含3个空格的数组。

然后,您可以通过执行以下操作为每个空间分配一个字符串:

astrWords(0) = "bak"
astrWords(1) = "log"
astrWords(2) = "dfd"

你可以在for循环中执行该操作:

Dim count As Integer = 0
For Each item In lstExtentions.Items
    astrWords(count) = item
    count = count + 1
Next

或者,您可以查看使用generic collection。这样你就可以使用Add()方法向它添加多个字符串

答案 3 :(得分:0)

我认为你希望你的extensionArray是String()类型而不是String。当您尝试初始化新数组时,初始化程序不知道要解析多个值。它只看到你的单个字符串。