2016-03-08 8 views
5

मैं अपने लिपियों में से एक में यह त्रुटि मिलती रहती है कैसे की जाँच करने के लिए:यदि एक वस्तु एक संग्रह

वस्तु एक संग्रह

तो मैं एक समारोह जो की जाँच करता है बनाना चाहते हैं नहीं है चाहे ऑब्जेक्ट उस पर कोई संचालन करने से पहले एक संग्रह है या नहीं।

अब तक मैं इस बनाया है:

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

लेकिन मैं महसूस कर रही मैं कुछ चेकों याद आ रही है - निश्चित रूप से ही उपलब्ध प्रकार बस String, Empty या Collection नहीं हैं?

मैंने सोचा कि param की कोशिश करने और गणना करने के लिए बेहतर हो सकता है और यदि यह कोई त्रुटि देता है, तो मुझे false आउटपुट पता है - क्या यह बेहतर विकल्प की तरह दिखता है?

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 

यहां तक ​​कि दूसरे उदाहरण में, यह है कि क्या दिया त्रुटि है "ऑब्जेक्ट एक संग्रह नहीं है" निर्दिष्ट करने के लिए बुद्धिमान हो सकता है?

उत्तर

2

वीबीस्क्रिप्ट वास्तव में प्रकार आत्मनिरीक्षण का समर्थन नहीं करता है। आप param की जांच कर सकते हैं, लेकिन फिर आपको एक समेकित इंटरफ़ेस को लागू करने वाले सभी वर्गों की आधिकारिक सूची की आवश्यकता होगी।

मैं कहना चाहता हूँ आपका सर्वश्रेष्ठ दांव वास्तव में वास्तव में param करके बताना और अगर आप एक 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 

के रूप में संभव के रूप में स्थानीय सुनिश्चित करें कि आप On Error Resume Next के दायरे छोड़ बनाओ, खासकर इसका इस्तेमाल बस इस समारोह के अंदर।

संबंधित मुद्दे