2009-11-09 115 views
0

正确的 - 首先,我进入陌生的地方 - 所以请善待!String Array事情!

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

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”} 它开始寻找整个语句,而不是循环遍历每个单独的一个?

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

任何帮助表示赞赏:)

回答

2

当您使用从字面阵列中设置该字符串,它就像您使用包含分隔字符串一个字符串:

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

你可能想要做的是把一个逗号分隔字符串,像"bak,log,dfd"的设置,那么你可以把它分解得到它作为一个数组:

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

你是一个真正的!太棒了! 非常感谢 - 开心编码:) – 2009-11-09 15:26:52

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 
    ... 

还有可能把lstExtentions一个更简单的方法。如果项目有一个'ToArray()'方法,但是我不确定你在那里使用什么类型的项目到项目中的项目...

0

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

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

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

New String() {My.Settings.extensionArray} 

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

如果要动态创建数组,你需要定义它是这样的:

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()方法将多个字符串添加到它的方式

0

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