Предположим, у меня есть Excel.PivotField, и мне нужно установить HiddenItemsList для моего объекта.
С VB.NET и Option Strict Off
& Option Explicit Off
это приведет к:
Dim field as Excel.PivotField = MyFunctionCall()
field.HiddenItemsList = GetHiddenItems()
Хотя это работает с этим параметром безопасности, оно, очевидно, не работает, когда вы устанавливаете Option Strict On
и Option Explicit On
.
IDE не может разрешить свойство HiddenItemsList в моем PivotField (первая проблема).
Но при использовании позднего связывания это работает отлично.
Теперь следующим шагом является включение Option Strict и Explicit (мы собираемся конвертировать в C # в будущем).
Итак, я смотрю, как код скомпилирован:
NewLateBinding.LateSet(field , Nothing, "HiddenItemsList", New Object() { GetHiddenItems() }, Nothing, Nothing)
Легко ли?
Но этот код опирается на пространство имен Microsoft.VisualBasic. И, конечно же, мы этого не хотим.
Итак, я попытался преобразовать его в простой вызов Reflection:
GetType(Excel.PivotField).GetProperty("HiddenItemsList").SetValue(field , GetHiddenItems() , Reflection.BindingFlags.SetProperty, Nothing, Nothing, Nothing)
К сожалению, первая часть (GetType(Excel.PivotField).GetProperty("HiddenItemsList")
) уже возвращает Nothing
, поэтому я застрял там.
А помочь? ; -)