Search code examples
.netvb.netobjectdrop-down-menuobject-type

How to check if an object is a certain type


I am passing various objects to a subroutine to run the same process but using a different object each time. For example, in one case I am using a ListView and in another case I am passing a DropDownList.

I want to check if the object being passed is a DropDownList then execute some code if it is. How do I do this?

My code so far which doesn't work:

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

Solution

  • In VB.NET, you need to use the GetType method to retrieve the type of an instance of an object, and the GetType() operator to retrieve the type of another known type.

    Once you have the two types, you can simply compare them using the Is operator.

    So your code should actually be written like this:

    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
    

    You can also use the TypeOf operator instead of the GetType method. Note that this tests if your object is compatible with the given type, not that it is the same type. That would look like this:

    If TypeOf Obj Is System.Web.UI.WebControls.DropDownList Then
    
    End If
    

    Totally trivial, irrelevant nitpick: Traditionally, the names of parameters are camelCased (which means they always start with a lower-case letter) when writing .NET code (either VB.NET or C#). This makes them easy to distinguish at a glance from classes, types, methods, etc.