Как проверить, является ли объект определенного типа

68

Я передаю различные объекты в подпрограмму для запуска того же процесса, но каждый раз с помощью другого объекта. Например, в одном случае я использую 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
Теги:
object
drop-down-menu
object-type

1 ответ

117
Лучший ответ

В VB.NET вам нужно использовать метод GetType, чтобы получить тип экземпляра объекта, а GetType() operator, чтобы получить тип другого известного типа.

Как только у вас есть два типа, вы можете просто сравнить их с помощью оператора 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

Полностью тривиальный, нерелевантный nitpick: традиционно имена параметров camelCased (что означает, что они всегда начинаются с строчной буквы) при написании .NET-кода (либо VB.NET, либо С#). Это позволяет легко отличить их от классов, типов, методов и т.д.

  • 1
    Спасибо за Ваш ответ. Я пробовал этот код, но на самом деле единственное, что он не работает с оператором '='. Я должен был изменить его на «Есть». Ошибка, которую я имел, когда это было '=' было 'Оператор' = ', не определена для типов' System.Type 'и' System.Type '. "
  • 1
    @Leah: Да, извините за это. Похоже, я должен уделять больше внимания при написании ответов. TypeOf , вероятно, еще более простой вариант, по крайней мере, с точки зрения читабельности кода; Я обновил ответ с примером этого тоже.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню