2013-05-31 105 views
0

这是我的代码。Array.IndexOf总是返回-1

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

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

测试返回值10.

但我正在逐渐IndexOf值-1。
里面QuickWatchVS 2005当我把价值10而不是测试我得到正确index

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

+0

你的数组中有什么? –

+0

编辑我的问题来回答你的问题。 – user2322507

+0

向我们显示实际的代码。我还没有发现任何缺陷IndexOf –

回答

2

的问题可能是由您的数组包含整数的事实引起的,但你正在寻找的值是。请看下面的例子:

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 

编辑:注意声明类型与此无关。让我们来声明数组作为对象,因为这是你在你的评论中提及了什么(请注意,下面的示例需要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)

+0

Dim myArray As Object =我的声明没有任何内容。如前所述,我也尝试将我的测试变量更改为对象,但它没有帮助。 – user2322507

+0

@ user2322507:声明与它无关。您需要*将短路转换为整数。你可以明确地(通过使用'CInt')或隐式地(通过声明你的函数的参数为​​'Integer'而不是'Short')来做到这一点。 – Heinzi

+0

这是完美的:) – user2322507

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 

上述工作。由于测试被宣布为简短,请确保MyArray也被声明为简短。

+0

我的数组定义是'Dim MyArray as Object = Nothing' – user2322507

+0

@ user2322507:什么你把*分配给'MyArray'? –

+0

m分配一些整数值。 – user2322507