.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,从而避免在运行时进行任何进一步的转换。