假设我有一个Excel.PivotField,并且需要在我的对象上设置HiddenItemsList。NewLateBinding.LateSet反射调用
用VB.NET和Option Strict Off
& Option Explicit Off
这将导致:
Dim field as Excel.PivotField = MyFunctionCall()
field.HiddenItemsList = GetHiddenItems()
虽然这一点也适用此安全设置,它显然不,当你设置Option Strict On
和Option Explicit On
工作。
IDE无法解析我的PivotField上的HiddenItemsList属性(第一个问题)。
但是,当使用后期绑定,它完美的作品。
现在下一步是启用Option Strict和Explicit(我们将来会转换为C#)。
所以我看的代码是如何编译:
NewLateBinding.LateSet(field , Nothing, "HiddenItemsList", New Object() { GetHiddenItems() }, Nothing, Nothing)
容易吧?
但是这段代码依赖于Microsoft.VisualBasic命名空间。当然,我们不希望这样。
所以,我试图将其转换为一个普通的反射调用:
GetType(Excel.PivotField).GetProperty("HiddenItemsList").SetValue(field , GetHiddenItems() , Reflection.BindingFlags.SetProperty, Nothing, Nothing, Nothing)
不幸的是第一部分(GetType(Excel.PivotField).GetProperty("HiddenItemsList")
)已经返回Nothing
,所以我卡住了。
有帮助吗? ;-)