Я передаю различные объекты в подпрограмму для запуска того же процесса, но каждый раз с помощью другого объекта. Например, в одном случае я использую 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()
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, либо С#). Это позволяет легко отличить их от классов, типов, методов и т.д.
TypeOf
, вероятно, еще более простой вариант, по крайней мере, с точки зрения читабельности кода; Я обновил ответ с примером этого тоже.