Что такое VB-эквивалент Java-экземпляра и isInstance()?
В духе C# вопрос..
Что такое эквивалентные операторы для сравнения типов классов в VB.NET?
4 ответа
Вы ищете что-то вроде TypeOf
? Это работает только со ссылочными типами, а не с int/etc.
If TypeOf "value" Is String Then
Console.WriteLine("'tis a string, m'lord!")
Или вы хотите сравнить два разных экземпляра переменных? Также работает для типов ссылок:
Dim one As Object = "not an object"
Dim two As Object = "also not an object, exactly"
Dim three as Object = 3D
If one.GetType.Equals( two.GetType ) Then WL("They are the same, man")
If one.GetType Is two.GetType then WL("Also the same")
If one.GetType IsNot three.GetType Then WL("but these aren't")
Вы также можете использовать gettype()
например, если вы не используете два объекта:
If three.GetType Is gettype(integer) then WL("is int")
Если вы хотите увидеть, является ли что-то подклассом другого типа (и входит ли в.net 3.5):
If three.GetType.IsSubclassOf(gettype(Object)) then WL("it is")
Но если вы хотите сделать это в более ранних версиях, вы должны перевернуть его (странно смотреть) и использовать:
If gettype(Object).IsAssignableFrom(three.GetType) Then WL("it is")
Все это компилируется в SnippetCompiler, так что пойдите DL, если у вас его нет.
Не уверен, когда это было реализовано, но теперь в VB есть Type.IsInstanceOfType():
"Возвращает true, если текущий Type находится в иерархии наследования объекта, представленного o, или если текущий Type является интерфейсом, который реализует o..."
Пример:
Dim arr(10) As Integer
If GetType(Array).IsInstanceOfType(arr) Then _
Console.WriteLine("Is int[] an instance of the Array class? {0}.",
GetType(Array).IsInstanceOfType(arr))
Выход:Is int[] an instance of the Array class? True.
VB эквивалент вашего связанного вопроса почти идентичен:
Dim result As Boolean = obj.GetType().IsAssignableFrom(otherObj.GetType())