Ich übergebe verschiedene Objekte an eine Unterroutine, um denselben Prozess auszuführen, aber jedes Mal ein anderes Objekt zu verwenden. In einem Fall verwende ich beispielsweise eine ListView und in einem anderen Fall übergebe ich eine DropDownList.
Ich möchte überprüfen, ob das übergebene Objekt eine DropDownList ist, und dann Code ausführen, falls dies der Fall ist. Wie mache ich das?
Mein bisheriger Code, der nicht funktioniert:
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
TypeOf
ist wahrscheinlich eine noch einfachere Option, zumindest in Bezug auf die Lesbarkeit des Codes; Ich habe die Antwort auch mit einem Beispiel dafür aktualisiert.Select Case (Obj.GetType())
mit mehreren Testfällen gegen mehrereIF TypeOf Obj is ...
?Einige weitere Details in Bezug auf die Antwort von Cody Gray. Da ich einige Zeit gebraucht habe, um es zu verdauen, dachte ich, dass es für andere nützlich sein könnte.
Zunächst einige Definitionen:
Bar
handelt es sich um einen TypeName inPublic Class Bar
oder inDim Foo as Bar
. TypeNames können als "Labels" angesehen werden, die im Code verwendet werden, um dem Compiler mitzuteilen, nach welcher Typdefinition in einem Wörterbuch gesucht werden soll, in dem alle verfügbaren Typen beschrieben werden.System.Type
Objekte, die einen Wert enthalten. Dieser Wert gibt einen Typ an. Genau wie einString
Text oderInt
eine Zahl, außer wir speichern Typen anstelle von Text oder Zahlen.Type
Objekte enthalten die Typdefinitionen sowie den entsprechenden Typnamen.Zweitens die Theorie:
Foo.GetType()
Gibt einType
Objekt zurück, das den Typ für die Variable enthältFoo
. Mit anderen Worten, es sagt Ihnen, wasFoo
eine Instanz von ist.GetType(Bar)
Type
Gibt ein Objekt zurück, das den Typ für den Typnamen enthältBar
.In einigen Fällen unterscheidet sich der Typ, in dem ein Objekt war
Cast
, von dem Typ, von dem ein Objekt zuerst instanziiert wurde. Im folgenden Beispiel ist MyObj eineInteger
Besetzung inObject
:Dim MyVal As Integer = 42 Dim MyObj As Object = CType(MyVal, Object)
Also, ist
MyObj
vom TypObject
oder vom TypInteger
?MyObj.GetType()
Ich werde dir sagen, dass es ein istInteger
.Type Of Foo Is Bar
Funktion, mit der Sie feststellen können,Foo
ob eine Variable mit einem TypeName kompatibel istBar
.Type Of MyObj Is Integer
undType Of MyObj Is Object
beide werden True zurückgeben. In den meisten Fällen gibt TypeOf an, dass eine Variable mit einem TypeName kompatibel ist, wenn die Variable von diesem Typ oder einem davon abgeleiteten Typ ist. Weitere Informationen finden Sie hier: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarksDer folgende Test veranschaulicht das Verhalten und die Verwendung der einzelnen genannten Schlüsselwörter und Eigenschaften recht gut.
BEARBEITEN
Sie können auch
Information.TypeName(Object)
den Typnamen eines bestimmten Objekts abrufen. Beispielsweise,quelle