是的 - 首先,我正在进入不熟悉的领域 - 所以请善待!
我有一个看起来像这样的脚本:
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”} 它开始寻找整个语句而不是循环遍历每个语句?
我认为它与单词字符串末尾有括号有关 - 但我迷路了!
任何帮助表示赞赏:)
答案 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。当您尝试初始化新数组时,初始化程序不知道要解析多个值。它只看到你的单个字符串。