Estoy pasando varios objetos a una subrutina para ejecutar el mismo proceso pero usando un objeto diferente cada vez. Por ejemplo, en un caso estoy usando un ListView y en otro caso estoy pasando un DropDownList.
Quiero verificar si el objeto que se pasa es un DropDownList y luego ejecutar algún código si lo es. ¿Cómo hago esto?
Mi código hasta ahora que no funciona:
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

TypeOfes probablemente una opción aún más simple, al menos en términos de legibilidad del código; También actualicé la respuesta con un ejemplo de eso.Select Case (Obj.GetType())con múltiples casos de prueba Vs múltiplesIF TypeOf Obj is ...?Algunos detalles más en relación con la respuesta de Cody Gray. Como me tomó un tiempo digerirlo, pensé que podría ser útil para otros.
Primero, algunas definiciones:
Bares un TypeName enPublic Class Baro enDim Foo as Bar. TypeNames podría verse como "etiquetas" utilizadas en el código para decirle al compilador qué definición de tipo buscar en un diccionario donde se describirían todos los tipos disponibles.System.Typeobjetos que contienen un valor. Este valor indica un tipo; al igualStringque a tomaría un texto oInttomaría un número, excepto que estamos almacenando tipos en lugar de texto o números.Typelos objetos contienen las definiciones de tipo, así como su correspondiente TypeName.En segundo lugar, la teoría:
Foo.GetType()devuelve unTypeobjeto que contiene el tipo de la variableFoo. En otras palabras, le dice quéFooes una instancia de.GetType(Bar)devuelve unTypeobjeto que contiene el tipo de TypeNameBar.En algunos casos, el tipo al que ha pertenecido un objeto
Castes diferente del tipo del que se creó una instancia por primera vez. En el siguiente ejemplo, MyObj se convierteIntegeren unObject:Dim MyVal As Integer = 42 Dim MyObj As Object = CType(MyVal, Object)Entonces, ¿es
MyObjde tipoObjecto de tipoInteger?MyObj.GetType()te dirá que es unInteger.Type Of Foo Is Barfunción, que le permite determinar que una variableFooes compatible con un TypeNameBar.Type Of MyObj Is IntegeryType Of MyObj Is Objectambos devolverán True. En la mayoría de los casos, TypeOf indicará que una variable es compatible con un TypeName si la variable es de ese tipo o de un tipo que se deriva de él. Más información aquí: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarksLa siguiente prueba ilustra bastante bien el comportamiento y el uso de cada una de las palabras clave y propiedades mencionadas.
EDITAR
También puede utilizar
Information.TypeName(Object)para obtener el TypeName de un objeto determinado. Por ejemplo,fuente