c# - NewLateBinding.LateSet 到反射调用

标签 c# .net reflection

假设我有一个 Excel.PivotField,我需要设置 HiddenItemsList在我的对象上。

使用 VB.NET 和 Option Strict Off & Option Explicit Off 这将导致:

Dim field as Excel.PivotField = MyFunctionCall()
field.HiddenItemsList = GetHiddenItems()

虽然这适用于此安全设置,但当您设置 Option Strict OnOption 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/

相关文章:

c# - 我们应该根据哪些因素为 Windows 应用程序选择 Java 或 .Net 技术?

c# - 来自同一类型的两个对象的组合键

c# - MySQL 查询从组合框中选择

c# - 确定互联网连接是否可用

java - 将具有简单、索引、嵌套或组合类型属性作为键的 Hashmap 转换为 Java Bean

c# - 使用 serilog 从 ASP.Net 核心身份记录事件

c# - 强类型数据集大放异彩

.net - 在 Azure 云服务运行覆盖中使用等待

c# - GetCustomAttributes 性能问题(表达式树是解决方案??)

arrays - Golang : get the type of slice