假设我有一个 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 无法解析我的 PivotField 上的 HiddenItemsList 属性(第一个问题)。
但是当使用后期绑定(bind)时,它工作得很好。
现在下一步是启用 Option Strict 和 Explicit(我们将在未来转换为 C#)。
所以我看看代码是如何编译的:
NewLateBinding.LateSet(字段,无,“HiddenItemsList”,新对象(){GetHiddenItems()},无,无)
简单吧?
但是这段代码依赖于 Microsoft.VisualBasic 命名空间。当然,我们不希望这样。
所以我尝试将其转换为普通的反射调用:
GetType(Excel.PivotField).GetProperty("HiddenItemsList").SetValue(field , GetHiddenItems() , Reflection.BindingFlags.SetProperty, Nothing, Nothing, Nothing)
不幸的是,第一部分 (GetType(Excel.PivotField).GetProperty("HiddenItemsList")
) 已经返回 Nothing
,所以我被困在那里了。
还有帮助? ;-)
最佳答案
总是很高兴回答您自己的问题。
由于 GetType(Excel.PivotField).GetProperty("HiddenItemsList")
返回 Nothing,我们需要另一种方法。
Type
上有一个方法,即 InvokeMember
,如果属性正确,该方法就可以工作!
这是给其他 SO-ers 的答案 :D
GetType(Excel.PivotField).InvokeMember("HiddenItemsList", Reflection.BindingFlags.SetProperty, Nothing, field, New Object() {GetHiddenItems() }, Nothing, Nothing, Nothing)
干杯
关于c# - NewLateBinding.LateSet 到反射调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220168/