2011-07-05 130 views
69

我将各种对象传递给子例程以运行相同的过程,但每次都使用不同的对象。例如,在一种情况下,我使用的是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 

回答

118

在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#)。这使得他们很容易区分类别,类型,方法等。

+1

感谢您的回答。我试过这个代码,但实际上唯一的事情是它不适用'='运算符。我必须改变它是'是'。我在'='时出现的错误是“运算符'='没有为'System.Type'和'System.Type'类型定义。” – Leah

+1

@Leah:对,对不起。看起来我应该在写答案时多加注意。 “TypeOf”可能是一个更简单的选项,至少在代码可读性方面是如此;我已经用一个例子更新了答案。 –

+0

谢谢,这也起作用 – Leah

相关问题