如何检查某个对象是否为某种类型
问题描述:
我将各种对象传递给子例程以运行相同的过程,但每次都使用不同的对象。例如,在一种情况下,我使用的是ListView,而在另一种情况下,我正在传递一个DropDownList。如何检查某个对象是否为某种类型
我想检查传递的对象是否是DropDownList,然后执行一些代码,如果是。我该怎么做呢?
到目前为止我的代码不工作:
Sub FillCategories(ByVal Obj As Object)
Dim cmd As New SqlCommand("sp_Resources_Categories", Conn)
cmd.CommandType = CommandType.StoredProcedure
Obj.DataSource = cmd.ExecuteReader
If Obj Is System.Web.UI.WebControls.DropDownList Then
End If
Obj.DataBind()
End Sub
答
在VB.NET中,你需要使用GetType
method检索对象的实例的类型,GetType()
operator检索类型另一种已知类型。
一旦你有两种类型,你可以简单地使用Is
运算符进行比较。
所以,你的代码实际上应该这样写:
Sub FillCategories(ByVal Obj As Object)
Dim cmd As New SqlCommand("sp_Resources_Categories", Conn)
cmd.CommandType = CommandType.StoredProcedure
Obj.DataSource = cmd.ExecuteReader
If Obj.GetType() Is GetType(System.Web.UI.WebControls.DropDownList) Then
End If
Obj.DataBind()
End Sub
您还可以使用TypeOf
operator而不是GetType
方法。请注意,这测试您的对象是兼容与给定的类型,而不是它是相同的类型。这将是这样的:
If TypeOf Obj Is System.Web.UI.WebControls.DropDownList Then
End If
共小事,无关紧要的挑剔:传统,参数的名称驼峰格式(这意味着他们总是用小写字母开头)编写.NET代码时(VB.NET或C#)。这使得他们很容易区分类别,类型,方法等。
感谢您的回答。我试过这个代码,但实际上唯一的事情是它不适用'='运算符。我必须改变它是'是'。我在'='时出现的错误是“运算符'='没有为'System.Type'和'System.Type'类型定义。” – Leah
@Leah:对,对不起。看起来我应该在写答案时多加注意。 “TypeOf”可能是一个更简单的选项,至少在代码可读性方面是如此;我已经用一个例子更新了答案。 –
谢谢,这也起作用 – Leah