Dot-Net

如何檢查對像是否為某種類型

  • July 5, 2011

我將各種對像傳遞給子常式以執行相同的程序,但每次都使用不同的對象。例如,在一種情況下,我使用 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方法來檢索對象實例的類型,並使用GetType()運算符來檢索另一個已知類型的類型。

擁有這兩種類型後,您可以使用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運算符而不是GetType方法。請注意,這會測試您的對像是否與給定類型兼容,而不是測試它是否是同一類型。看起來像這樣:

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

End If

*完全無關緊要的吹毛求疵:*傳統上,在編寫 .NET 程式碼(VB.NET 或 C#)時,參數的名稱是駝峰式(這意味著它們總是以小寫字母開頭)。這使它們一目了然地與類、類型、方法等區分開來。

引用自:https://stackoverflow.com/questions/6580044