2011-07-05 43 views
69

Tôi đang truyền các đối tượng khác nhau cho một chương trình con để chạy cùng một quy trình nhưng sử dụng một đối tượng khác nhau mỗi lần. Ví dụ, trong một trường hợp tôi đang sử dụng một ListView và trong trường hợp khác tôi đang đi qua một DropDownList.Cách kiểm tra xem đối tượng có phải là một loại nhất định

Tôi muốn kiểm tra xem đối tượng được truyền có phải là DropDownList không, sau đó thực thi một số mã nếu có. Làm thế nào để tôi làm điều này?

Mã của tôi cho đến nay mà không làm việc:

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 

Trả lời

118

Trong VB.NET, bạn cần phải sử dụng GetType method để lấy loại một thể hiện của một đối tượng, và GetType() operator để lấy các loại của một loại đã biết khác.

Khi bạn có hai loại, bạn có thể chỉ cần so sánh chúng bằng cách sử dụng toán tử Is.

Vì vậy, mã của bạn thực sự nên được viết như thế này:

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 

Bạn cũng có thể sử dụng TypeOf operator thay vì phương pháp GetType. Lưu ý rằng điều này sẽ kiểm tra nếu đối tượng của bạn là tương thích với loại đã cho, không phải là đối tượng đó cùng loại. Điều đó sẽ trông như thế này:

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

End If 

Hoàn toàn tầm thường, không liên quan nitpick: Theo truyền thống, tên của tham số được camelCased (có nghĩa là họ luôn luôn bắt đầu bằng chữ cái-chữ thường) khi viết mã NET (hoặc VB.NET hoặc C#). Điều này giúp dễ dàng phân biệt trong nháy mắt từ các lớp, loại, phương pháp, v.v.

+1

Cảm ơn câu trả lời của bạn. Tôi đã thử mã đó nhưng thực sự điều duy nhất là nó không hoạt động với toán tử '='. Tôi phải đổi nó thành 'Is'. Lỗi tôi có khi '=' là "Toán tử '=' không được định nghĩa cho các loại 'System.Type' và 'System.Type'." – Leah

+1

@Leah: Vâng, xin lỗi về điều đó. Có vẻ như tôi nên bắt đầu chú ý hơn khi viết câu trả lời. 'TypeOf' có lẽ là một tùy chọn đơn giản hơn, ít nhất là về khả năng đọc mã; Tôi cũng đã cập nhật câu trả lời với một ví dụ về điều đó. –

+0

Cảm ơn, điều đó cũng hoạt động quá – Leah

Các vấn đề liên quan