2011-07-05 16 views
69

Przekazuję różne obiekty do podprogramu w celu uruchomienia tego samego procesu, ale za każdym razem za pomocą innego obiektu. Na przykład w jednym przypadku używam ListView, aw innym przypadku przekazuję DropDownList.Jak sprawdzić, czy obiekt jest określonego typu?

Chcę sprawdzić, czy przekazywany obiekt to DropDownList, a następnie wykonać kod, jeśli jest. Jak mam to zrobic?

Mój kod, który do tej pory nie działa:

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 

Odpowiedz

118

w VB.NET, trzeba użyć GetType method pobrać typ instancji obiektu, a GetType() operator pobrać typ innego znanego typu.

Po wybraniu obu typów można je po prostu porównać za pomocą operatora Is.

więc kod powinien być rzeczywiście napisane tak:

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 

Można również użyć TypeOf operator zamiast metody GetType. Zauważ, że to sprawdzenie, czy Twój obiekt jest zgodny z z danym typem, a nie, że jest tego samego typu. Że będzie wyglądać następująco:

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

End If 

Całkowicie trywialne, nieistotnych nitpick: Tradycyjnie, nazwy parametrów są camelCased (co oznacza, że ​​zawsze zaczynać się od małej litery) podczas pisania kodu .NET (VB.NET lub C#). Dzięki temu można je łatwo odróżnić na pierwszy rzut oka od klas, typów, metod itp.

+1

Dzięki za odpowiedź. Próbowałem tego kodu, ale w rzeczywistości jedyną rzeczą jest to, że nie działa z operatorem "=". Musiałem zmienić to na "Jest". Błąd, który miałem, gdy był "=", brzmiał "Operator" = "nie jest zdefiniowany dla typów" System.Type "i" System.Type "." – Leah

+1

@Leah: Tak, przepraszam za to. Wygląda na to, że powinienem zacząć zwracać więcej uwagi podczas pisania odpowiedzi. 'TypeOf' jest prawdopodobnie jeszcze prostszą opcją, przynajmniej pod względem czytelności kodu; Zaktualizowałem też odpowiedź na ten przykład. –

+0

Dzięki, że działa też – Leah

Powiązane problemy