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
答案 0 :(得分:2)
基本上,GetType()运算符需要一个typename,而不是一个对象。要获取对象的类型,请使用其GetType()方法。 IOW,在您的代码中,您可以:
GetType(TextBox)
但不能:
GetType(TextBox1) ' Won't compile!
并且必须:
TextBox1.GetType()
因此,错误是预期的,您的解决方案很好,失败的重写尝试是错误的,正如预期的那样。
有关详细说明,请查看:
答案 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.")