我有一个用户输入字符串的程序。此字符串长度始终是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'.
我该如何解决这个问题?
答案 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 ...”,这会暗示该变量不是数组变量。