0

这是我的代码。

Public Sub SomeFucntion(ByVal test As Short) 
    SomeOtherFucntion(MyArray)

    If Array.IndexOf(MyArray, test) <> -1
       //....
    End If
End Sub

测试返回值 10。

但我得到的IndexOf价值是-1。
当我将值设置为 10 而不是 testQuickWatchVS 2005,我得到了正确的结果index

我的数组是一维数组,现在有 2,5 和 10。因为它有 10,所以理想情况下应该返回 2 作为索引。

4

2 回答 2

3
Dim test As Short = 5

Dim MyArray() As Short = {1, 3, 4, 5, 7, 3}
If Array.IndexOf(MyArray, test) <> -1 Then
    MessageBox.Show("Index Found.") 
End If

以上工作。由于 test 被声明为短,请确保 MyArray 也被声明为短。

于 2013-05-31T12:16:46.903 回答
2

问题可能是由于您的数组包含整数,但您要查找的值是的。考虑以下示例:

Dim myArray As Integer() = {5}
Dim value As Short = 5
Console.WriteLine(Array.IndexOf(myArray, value))  ' Prints -1

如果数组包含整数,则需要先将 short 转换为整数,例如,使用CInt

Dim myArray As Integer() = {5}
Dim value As Short = 5
Console.WriteLine(Array.IndexOf(myArray, CInt(value)))  ' Prints 0

编辑:请注意,声明的类型与此无关。让我们将数组声明为Object,因为这是您在评论中提到的(请注意,以下示例需要 Option Strict Off,这很糟糕):

Dim myArray As Object = New Integer() {5}
Dim value As Object = 5S  ' Short literal
Console.WriteLine(Array.IndexOf(myArray, value))  ' still returns -1
Console.WriteLine(Array.IndexOf(myArray, CInt(value)))  ' returns 0

注意:您可以通过将函数声明为Public Sub SomeFunction(ByVal test As Integer).

于 2013-05-31T12:32:58.877 回答