List(of Int32).Contains([int64 value])由于不同的类型而不起作用

时间:2012-03-07 00:24:35

标签: vb.net list contains ilist

我有一个由WCF从json反序列化的整数列表。此列表反序列化为(int32)列表。我对它的反序列化没有任何控制。

我需要能够看到此列表是否包含恰好是Int64的值。它显然不起作用。以下是该函数的示例:

Private Shared Function IsIn(aPropertyValue As Int64, aList As IList) As Boolean
    Return aList.Contains(aPropertyValue)
End Function

我传递IList的原因是因为我不想创建这个函数12次,每个数字类型一次,字节到uint64。如果我确实创建了12次,每次可能选项的时间为12 x 12次,我想我可以使用List(of T).Exists()。

Contains()的文档说它使用IEquatable(Of T).Equals来执行比较。我必须认为可以比较具有相同值的Int32和Int64,并且发现它们是相等的。

我一定错过了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

试试这个:

Private Function IsIn(ByVal aPropertyValue As Long, ByVal list As IList) As Boolean
    Dim genericListType As Type = CType(list, Object).GetType().GetGenericArguments()(0)
    Dim convertedPropertyValue As Object = Nothing
    Try
        convertedPropertyValue = Convert.ChangeType(aPropertyValue, genericListType)
    Catch
    End Try
    If convertedPropertyValue IsNot Nothing Then
        Return list.Contains(convertedPropertyValue)
    Else
        Return False
    End If
End Function