2016-03-08 17 views
5

ich in einem meiner Skripte diesen Fehler werden immer:Wie um zu überprüfen, ob ein Objekt eine Sammlung ist

Objekt ist keine Sammlung

So würde ich eine Funktion erstellen möchten, die überprüft ob das Objekt eine Sammlung ist oder nicht, bevor Sie irgendwelche Operationen daran ausführen.

Bisher habe ich diese erstellt:

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

Aber ich habe das Gefühl, ich einige Prüfungen fehle - sicherlich die einzigen verfügbaren Typen sind nicht nur String, Empty oder Collection?

Ich dachte, es könnte besser sein, einfach zu versuchen und aufzuzählen param und wenn dies einen Fehler zurückgibt, dann weiß ich false ausgeben - scheint das wie eine bessere Alternative?

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 

Auch im zweiten Beispiel wäre es ratsam zu spezifizieren, ob der angegebene Fehler "Objekt ist keine Sammlung" ist?

Antwort

2

VBScript unterstützt nicht wirklich Typ Introspektion. Sie könnten die TypeName von param überprüfen, aber dann benötigen Sie eine autorisierende Liste aller Klassen, die eine aufzählbare Schnittstelle implementieren.

Ich würde sagen, die beste Wahl in der Tat tatsächlich ist, zu versuchen param aufzuzählen und überprüfen, ob Sie eine runtime error 451 erhalten:

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 

Achten Sie darauf, den Umfang der On Error Resume Next lassen wie möglich lokalisiert, vorzugsweise es verwenden nur innerhalb dieser Funktion.

Verwandte Themen