GetType - VB.NET - 代码导致语法错误

时间:2015-07-29 14:03:07

标签: vb.net

Imports System.Windows.Forms

Module Module1

    Sub Main()
        Dim TextBox1 As New TextBox
        Dim TextBox2 As New TextBox
        If (GetType(TextBox1).Equals(GetType(TextBox2))) Then ' Error Here
            Console.WriteLine("They are equal.")
        End If
    End Sub

End Module

我知道,对象的GetType返回它的Type。但是这里GetType(TextBox1)导致错误。我需要重写这个逻辑:

If (GetType(TextBox1).Equals(GetType(TextBox2))) Then ' Error Here
    Console.WriteLine("They are equal.")
End If
我是这样写的:

If TextBox1.GetType().FullName.Equals(TextBox2.GetType().FullName) Then ' Works fine
    Console.WriteLine("They are equal.")
End If

你能重新编写逻辑吗?

If (GetType(TextBox1).Equals(GetType(TextBox2))) Then ' Error Here
    Console.WriteLine("They are equal.")
End If

3 个答案:

答案 0 :(得分:2)

基本上,GetType()运算符需要一个typename,而不是一个对象。要获取对象的类型,请使用其GetType()方法。 IOW,在您的代码中,您可以:

GetType(TextBox)

但不能:

GetType(TextBox1) ' Won't compile!

并且必须:

TextBox1.GetType()

因此,错误是预期的,您的解决方案很好,失败的重写尝试是错误的,正如预期的那样。

有关详细说明,请查看:

https://msdn.microsoft.com/en-us/library/tay4kywk.aspx

答案 1 :(得分:1)

GetType operator适用于类型名称,而非变量名称。

If (GetType(TextBox).Equals(GetType(TextBox))) Then
    Console.WriteLine("They are equal.")
End If

如果您需要获取变量的类型,那么您已经拥有的变量将起作用,但我不明白为什么您需要调用FullName

If TextBox1.GetType() Is TextBox2.GetType() Then
    Console.WriteLine("They are equal.")
End If

答案 2 :(得分:0)

如果你想检查两个对象相同,那么使用:

If TypeName(TextBox1).Equals(TypeName(TextBox2)) Then Console.WriteLine("They are equal.")