3

wmi情報を返す次のコードがあります(不明な配列)

For Each objMgmt In oquery.Get()
  For Each theproperty In objMgmt.Properties
    If (TypeOf objMgmt(theproperty.Name) Is System.Array) Then
      myrow(theproperty.Name) = ConvertArray(CType(objMgmt(theproperty.Name), Array)).Trim
    end if                      
  next
next

関数 ConvertArray はこれを文字列値に変換します。

Function ConvertArray(ByVal myarray As System.Array) As String
    Dim tel As Integer
    Dim res As String = ""
    If myarray.Length = 0 Then
        Return ""
    End If
    If myarray.Length = 1 Then
        res = myarray(0).ToString
    Else
        For tel = 0 To myarray.Length - 1
            If TypeOf myarray(tel) Is UInt16 Then
                res = res + "[" + CType(myarray(tel), UInt16).ToString + "] , "
            Else
                res = res + CStr(myarray(tel)) + " , "
            End If
        Next
        res = Mid(res, 1, Len(res) - 2)
    End If
    Return res
End Function

"myarray(tel)" で、オプションを明示的にオンにすると、"Option Strict On では遅延バインディングが許可されません" という問題が発生します。これを解決するにはどうすればよいですか。wmi は、クエリに応じて整数または文字列を返します。

4

1 に答える 1

7

myarray.GetValue(0)の代わりに行うことができますmyArray(0)。これは、OptionStrictOnでも機能します。

于 2011-07-19T15:13:51.547 に答える