C# VSTO Excel对象引用不一致:获取自定义属性代码报错咨询
问题根源与修复方案
嘿,咱们来拆解下你遇到的问题——核心原因其实是类型不匹配+缺少显式转换,两段代码的差异就在这里:
为什么第一段会报错?
看第一段代码:
Microsoft.Office.Core.DocumentProperties MyProperties; MyProperties = Application.ActiveWorkbook.CustomDocumentProperties; Office.DocumentProperty MyProperty2 = MyProperties.Item(CustomPropKey);
这里你把MyProperties声明为Microsoft.Office.Core.DocumentProperties类型,而这个接口的Item方法返回的是object类型(不是强类型的Office.DocumentProperty)。编译器没法自动把object直接转成Office.DocumentProperty,所以就给你标红报错了。
那第二段为啥没问题?
第二段是链式调用:
Office.DocumentProperty MyProperty = Application.ActiveWorkbook.CustomDocumentProperties.Item(CustomPropKey);
这里编译器会帮你做个小操作——因为你明确声明了目标变量是Office.DocumentProperty,它会自动把Item方法返回的object隐式转换成你要的类型,所以不会报错。
两种修复方式
针对第一段代码,你可以任选一种方式解决:
1. 加显式强制转换
直接把Item的返回值转成Office.DocumentProperty就行:
Microsoft.Office.Core.DocumentProperties MyProperties; MyProperties = Application.ActiveWorkbook.CustomDocumentProperties; Office.DocumentProperty MyProperty2 = (Office.DocumentProperty)MyProperties.Item(CustomPropKey);
2. 统一类型声明
把MyProperties的类型改成Office.DocumentProperties(注意对应命名空间),这样它的Item方法会直接返回强类型的Office.DocumentProperty:
Office.DocumentProperties MyProperties; MyProperties = (Office.DocumentProperties)Application.ActiveWorkbook.CustomDocumentProperties; Office.DocumentProperty MyProperty2 = MyProperties.Item(CustomPropKey);
另外,如果你想简化代码,也可以用var让编译器自动推断类型,既简洁又能避免类型不匹配的坑:
var MyProperties = Application.ActiveWorkbook.CustomDocumentProperties; Office.DocumentProperty MyProperty2 = (Office.DocumentProperty)MyProperties.Item(CustomPropKey);
内容的提问来源于stack exchange,提问作者Neil Kimber
相关产品推荐
相关产品推荐

