尝试获取数组的索引时出错

时间:2014-07-29 14:09:03

标签: .net arrays vb.net indexing

我有一个用户输入字符串的程序。此字符串长度始终是8的倍数。

因此,为了转换字符串,我将每8个字符的字符串拆分为一个数组。

我使用此代码

Dim substrings = Enumerable.Range(0, input.Length \ 8).[Select](Function(i) input.Substring(i * 8, 8))

工作正常。

然后我可以输入String.Join(" ", substrings),它就像它应该的那样工作,它接受用户输入的任何内容,并在每8个字符之间放置一个空格。

但是,如果我尝试这样做:

Dim indexOfEntry
For Each e In substrings
    indexOfEntry = Array.IndexOf(substrings, e)
Next

我收到错误:

An unhandled exception of type 'System.InvalidCastException' occurred in DataCalculator.exe

Additional information: Unable to cast object of type 'WhereSelectEnumerableIterator`2[System.Int32,System.String]' to type 'System.Array'.

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

更改分割线以返回字符串数组

 Dim substrings = Enumerable.Range(0, input.Length \ 8).[Select](Function(i) _ 
                                   input.Substring(i * 8, 8)).ToArray()

我真的建议你在VB.NET配置中打开OPTION STRICT标志 这允许编译器检查您的代码是否存在这样的潜在缺陷。

像VB6这样的值的自动转换不应该在.NET世界中占有一席之地(但这是一个意见,我认为在将该标志设置为OFF的情况下移植旧程序会更容易。)

答案 1 :(得分:0)

您的substrings变量不是数组;它是一个IEnumerable(Of String)。您可以将其转换为带有substrings.ToArray()的数组。

转动Option Strict On会在编译时捕获这样的错误。在这种情况下,您会在Array.IndexOf调用中看到“Overload resolution failed ...”,这会暗示该变量不是数组变量。