我将各种对象传递给子例程以运行相同的进程,但每次都使用不同的对象。例如,在一种情况下我使用 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#)时,参数名称采用驼峰命名法(这意味着它们始终以小写字母开头) 。这使得它们一眼就能与类、类型、方法等区分开来。
关于.net - 如何检查一个对象是否属于某种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580044/