Saya mengirimkan berbagai objek ke subrutin untuk menjalankan proses yang sama tetapi menggunakan objek yang berbeda setiap saat. Misalnya, dalam satu kasus saya menggunakan ListView dan dalam kasus lain saya meneruskan DropDownList.
Saya ingin memeriksa apakah objek yang dilewatkan adalah DropDownList lalu jalankan beberapa kode jika ya. Bagaimana saya melakukan ini?
Kode saya sejauh ini yang tidak berfungsi:
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
mungkin merupakan opsi yang lebih sederhana, setidaknya dalam hal keterbacaan kode; Saya telah memperbarui jawabannya dengan contoh itu juga.Select Case (Obj.GetType())
dengan beberapa kasus uji Vs multipelIF TypeOf Obj is ...
?Beberapa detail lebih lanjut terkait dengan tanggapan dari Cody Grey. Karena saya butuh waktu untuk mencernanya, saya pikir itu mungkin berguna bagi orang lain.
Pertama, beberapa definisi:
Bar
adalah TypeName dalamPublic Class Bar
, atau dalamDim Foo as Bar
. TypeNames bisa dilihat sebagai "label" yang digunakan dalam kode untuk memberi tahu kompiler definisi tipe mana yang harus dicari dalam kamus di mana semua tipe yang tersedia akan dijelaskan.System.Type
objek yang mengandung nilai. Nilai ini menunjukkan tipe; sama seperti aString
akan mengambil beberapa teks atauInt
akan mengambil angka, kecuali kita menyimpan tipe, bukan teks atau angka.Type
objek berisi definisi tipe, serta TypeName yang sesuai.Kedua, teori:
Foo.GetType()
mengembalikanType
objek yang berisi tipe untuk variabelFoo
. Dengan kata lain, ini memberi tahu Anda apaFoo
itu instance.GetType(Bar)
mengembalikanType
objek yang berisi tipe untuk TypeNameBar
.Dalam beberapa contoh, tipe objek yang dikunjungi
Cast
berbeda dari tipe objek pertama kali dibuat. Dalam contoh berikut, MyObj di-Integer
cast menjadiObject
:Dim MyVal As Integer = 42 Dim MyObj As Object = CType(MyVal, Object)
Jadi, apakah
MyObj
tipeObject
atau tipenyaInteger
?MyObj.GetType()
akan memberi tahu Anda bahwa ini adalahInteger
.Type Of Foo Is Bar
fitur, yang memungkinkan Anda untuk memastikan variabelFoo
kompatibel dengan TypeNameBar
.Type Of MyObj Is Integer
danType Of MyObj Is Object
keduanya akan mengembalikan True. Untuk kebanyakan kasus, TypeOf akan menunjukkan bahwa variabel kompatibel dengan TypeName jika variabel tersebut adalah Jenis atau Jenis yang berasal darinya. Info lebih lanjut di sini: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarksPengujian di bawah ini menggambarkan dengan baik perilaku dan penggunaan setiap kata kunci dan properti yang disebutkan.
EDIT
Anda juga bisa menggunakan
Information.TypeName(Object)
untuk mendapatkan TypeName dari objek tertentu. Sebagai contoh,sumber