2016-03-08 34 views
5

tôi tiếp tục nhận được lỗi này trong một trong những kịch bản của tôi:Làm thế nào để kiểm tra nếu một đối tượng là một Bộ sưu tập

Object là Không phải là một sưu tập

Vì vậy, tôi muốn tạo một hàm mà kiểm tra có hay không đối tượng là một bộ sưu tập trước khi thực hiện bất kỳ thao tác nào trên đó.

Cho đến nay tôi đã tạo ra này:

Function IsCollection(param) 
    If IsEmpty(param) Then 
     IsCollection = False 
    ElseIf(TypeName(param) = "String") Then 
     IsCollection = False 
    Else 
     IsCollection = True 
    End If 
End Function 

Nhưng tôi có cảm giác tôi đang thiếu một số kiểm tra - chắc chắn các loại có sẵn chỉ là không chỉ String, Empty hoặc Collection?

Tôi nghĩ có thể tốt hơn là chỉ thử và liệt kê param và nếu điều này trả về lỗi, thì tôi biết đầu ra false - điều này có vẻ như là lựa chọn thay thế tốt hơn không?

Function IsCollection(param) 
    For Each p In param 
     ' Anything need to go here? 
    Next 

    If Err > 0 Then 
     IsCollection = False 
    Else 
     IsCollection = True 
    End If 
End Function 

Thậm chí trong ví dụ thứ hai, bạn có nên chỉ định xem lỗi được đưa ra là "Đối tượng không phải là tập hợp" không?

Trả lời

2

VBScript không thực sự hỗ trợ nội dung loại. Bạn có thể kiểm tra các TypeName của param, nhưng sau đó bạn cần một danh sách có thẩm quyền của tất cả các lớp thực hiện một giao diện enumerable.

Tôi muốn nói đặt cược tốt nhất của bạn thực sự là để thực sự cố gắng liệt kê param và kiểm tra xem bạn có được một runtime error 451:

Function IsCollection(param) 
    On Error Resume Next 
    For Each p In param 
     Exit For 
    Next 
    If Err Then 
     If Err.Number = 451 Then 
      IsCollection = False 
     Else 
      WScript.Echo "Unexpected error (0x" & Hex(Err.Number) & "): " & _ 
       Err.Description 
      WScript.Quit 1 
     End If 
    Else 
     IsCollection = True 
    End If 
End Function 

Hãy chắc chắn rằng bạn rời khỏi phạm vi của On Error Resume Next như cục bộ càng tốt, tốt nhất là sử dụng nó ngay bên trong chức năng này.

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