.NET Office 类型库枚举和缩小转换(有更好的方法吗?)
.NET Office type library enums and narrowing conversions (is there a better way?)
在 Option Strict On 的 VB.NET 项目中使用 Microsoft Office 对象,只需使用 Office 类型库枚举,如下所示:
Dim vsoShape as Visio.Shape
Dim UUID as String
UUID = vsoShape.UniqueID(Visio.VisUniqueIDArgs.visGetOrMakeGUIDWithUndo)
会,因为枚举是 As Integer 并且参数是 Short/Int16,给出这个错误:
错误 BC30512 Option Strict On 不允许从 'VisUniqueIDArgs' 到 'Short' 的隐式转换。
在这些枚举被用作参数的地方解决这个错误(这是很多代码,数千行,通常一行代码中有 3 个枚举参数):
UUID = vsoShape.UniqueID(CShort(Visio.VisUniqueIDArgs.visGetOrMakeGUIDWithUndo))
使用 CShort() 显式转换可以工作,但不是很优雅,并且会降低代码的可读性。
这个问题有没有更优雅的解决方案?
您可以在代码中将相应的 enum 定义为 short,从而避免在运行时进行任何进一步的转换。
在 Option Strict On 的 VB.NET 项目中使用 Microsoft Office 对象,只需使用 Office 类型库枚举,如下所示:
Dim vsoShape as Visio.Shape
Dim UUID as String
UUID = vsoShape.UniqueID(Visio.VisUniqueIDArgs.visGetOrMakeGUIDWithUndo)
会,因为枚举是 As Integer 并且参数是 Short/Int16,给出这个错误:
错误 BC30512 Option Strict On 不允许从 'VisUniqueIDArgs' 到 'Short' 的隐式转换。
在这些枚举被用作参数的地方解决这个错误(这是很多代码,数千行,通常一行代码中有 3 个枚举参数):
UUID = vsoShape.UniqueID(CShort(Visio.VisUniqueIDArgs.visGetOrMakeGUIDWithUndo))
使用 CShort() 显式转换可以工作,但不是很优雅,并且会降低代码的可读性。
这个问题有没有更优雅的解决方案?
您可以在代码中将相应的 enum 定义为 short,从而避免在运行时进行任何进一步的转换。