Asp.net Array.IndexOf始终返回-1

Asp.net Array.IndexOf始终返回-1,asp.net,arrays,vb.net,Asp.net,Arrays,Vb.net,这是我的密码 Public Sub SomeFucntion(ByVal test As Short) SomeOtherFucntion(MyArray) If Array.IndexOf(MyArray, test) <> -1 //.... End If End Sub 公共子功能(简称ByVal测试) 其他功能(MyArray) If Array.IndexOf(MyArray,test)-1 //.... 如果结束 端接头 测试

这是我的密码

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

    If Array.IndexOf(MyArray, test) <> -1
       //....
    End If
End Sub
公共子功能(简称ByVal测试)
其他功能(MyArray)
If Array.IndexOf(MyArray,test)-1
//....
如果结束
端接头
测试返回值10

但我得到的
IndexOf
值为-1。
QuickWatch
内部
VS 2005
中,当我将值设为10而不是test时,我得到了正确的
索引

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

Dim test作为Short=5
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
Dim MyArray()作为Short={1,3,4,5,7,3} 如果Array.IndexOf(MyArray,test)-1,则 Show(“找到索引”) 如果结束
以上工作。由于测试被声明为short,请确保MyArray也被声明为short。

Dim test as short=5
Dim MyArray()作为Short={1,3,4,5,7,3}
如果Array.IndexOf(MyArray,test)-1,则
Show(“找到索引”)
如果结束

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

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

Dim myArray As Integer() = {5}
Dim value As Short = 5
Console.WriteLine(Array.IndexOf(myArray, value))  ' Prints -1
如果数组包含整数,则需要首先将短字符转换为整数,例如,使用
CInt

Dim myArray As Integer() = {5}
Dim value As Short = 5
Console.WriteLine(Array.IndexOf(myArray, CInt(value)))  ' Prints 0
编辑:请注意,声明的类型与此无关。让我们将数组声明为对象,因为这是您在注释中提到的(请注意,下面的示例需要选项Strict Off,这是错误的):


注意:您可以通过将函数声明为
Public Sub-SomeFunction(ByVal test为Integer)
隐式转换。问题可能是由于数组包含整数,但您要查找的值是short。考虑下面的例子:

Dim myArray As Integer() = {5}
Dim value As Short = 5
Console.WriteLine(Array.IndexOf(myArray, value))  ' Prints -1
如果数组包含整数,则需要首先将短字符转换为整数,例如,使用
CInt

Dim myArray As Integer() = {5}
Dim value As Short = 5
Console.WriteLine(Array.IndexOf(myArray, CInt(value)))  ' Prints 0
编辑:请注意,声明的类型与此无关。让我们将数组声明为对象,因为这是您在注释中提到的(请注意,下面的示例需要选项Strict Off,这是错误的):



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

数组中有什么?编辑我的问题以回答您的问题。显示实际代码。我还没有在Indexof中发现任何缺陷,这不是您的代码。test未设置为值,Array.IndexOf行可能缺少If语句……数组中有什么?请编辑我的问题以回答您的问题。显示实际代码。我还没有在Indexof中发现任何缺陷,这不是您的代码。测试未设置为值,并且Array.IndexOf行可能缺少一个If语句……我的数组定义是
Dim MyArray as Object=Nothing
@user2322507:您将什么分配给
MyArray
?m分配一些整数值。然后测试还需要声明为Object,下面再次工作:Dim test as Object=5 Dim MyArray()as Object={1,3,4,5,7,3}如果Array.IndexOf(MyArray,test)-1,那么MessageBox.Show(“Index Found.”)结束,如果您说的是上述代码(原样)不适用于您?因为它适用于我。如果您的代码与上面的代码不同,请将其粘贴到这里。我的数组定义是
Dim MyArray as Object=Nothing
@user2322507:您将什么分配给
MyArray
?m分配一些整数值。然后,还需要将test声明为Object,下面再次说明:Dim test as Object=5 Dim MyArray()As Object={1,3,4,5,7,3}如果Array.IndexOf(MyArray,test)-1然后是MessageBox.Show(“Index Found.”)如果您说的是上述代码(原样),则结束不适用于您?因为它适用于我。如果您的代码与上述代码不同,请将其粘贴到此处。Dim myArray As Object=Nothing是我的声明。正如前面所建议的,我还尝试将测试变量更改为Object,但没有帮助。@user2322507:声明与此无关。您需要将short转换为整数r、 您可以显式(使用
CInt
)或隐式(将函数的参数声明为
Integer
而不是
Short
).Dim myArray As Object=我的声明没有任何内容。正如前面所建议的,我也尝试将测试变量更改为Object,但没有任何帮助。@user2322507:声明与此无关。您需要将short转换为整数。您可以显式(通过使用
CInt
)或隐式执行此操作(将函数的参数声明为
Integer
而不是
Short
)。