是否可以在 C# 中使用具有带空格值的 VB6 枚举?
Is it possible to use VB6 enums which have values with spaces in C#?
我们有一个 VB6 DLL,其中包含几个枚举定义。我们已将 VB6 DLL 作为参考加载到 C# 项目中。
在 VB6 中,您可以使用特殊的方括号语法声明名称中包含空格的枚举值。示例:
Public Enum TestEnumNoSpaces
EnumA
EnumB
EnumC
End Enum
Public Enum TestEnumWithSpaces
[Enum A]
[Enum B]
[Enum C]
End Enum
如果将其编译为 DLL 并将其作为引用加载到 Visual Studio 2010 中,则在对象浏览器中两个枚举都可见。但是,枚举 values 未针对 TestEnumWithSpaces 显示,并且在 C# 代码中使用智能感知时也未列出。 TestEnumNoSpaces 的值正常列出。
如果我在代码 window 中单击 TestEnumWithSpaces 并 select 转到定义,我得到如下内容:
namespace DLLName
{
[Guid("3DD0C797-2BF0-4A7A-8E1E-83E3095CB3AE")]
public enum TestEnumWithSpaces
{
}
}
对于 TestEnumNoSpaces 同样如此:
namespace DLLName
{
[Guid("9A7152DB-20D7-49D8-8E33-E74F895DFE05")]
public enum TestEnumNoSpaces
{
EnumA = 0,
EnumB = 1,
EnumC = 2,
}
}
这表明相同的事情 - 枚举存在但没有值。
我们可以做些什么来显示枚举值吗?在问题 Spaces in C# Enums 中,为在 C# 中定义的枚举显示了一种方法,但不适用于像我这样通过 COM 互操作导入的枚举。
注意 - 如有必要,我可以修改 VB6 DLL,但这不是首选,因为一堆其他 VB6 代码必须相应地更改。
谢谢
根据@hvd 的建议,我在 VB6 中构建了这个示例:
Public Enum TestEnumWithSpaces
[Enum A] = 0
EnumA = [Enum A]
[Enum B] = 1
EnumB = [Enum B]
[Enum C] = 2
EnumC = [Enum C]
End Enum
这确实按预期工作 - 没有空格的枚举值显示在 C# 中。
我认为这可能是一个可行的选择,因为我们有能力修改 VB6 DLL,尽管一开始维护工作量很大。随着时间的推移,我们的想法是不再添加其中包含空格的新枚举值。
我还没有检查这是否会破坏二进制兼容性,但如果是的话那将是一个缺点,尽管我们可以接受它。
我们有一个 VB6 DLL,其中包含几个枚举定义。我们已将 VB6 DLL 作为参考加载到 C# 项目中。
在 VB6 中,您可以使用特殊的方括号语法声明名称中包含空格的枚举值。示例:
Public Enum TestEnumNoSpaces
EnumA
EnumB
EnumC
End Enum
Public Enum TestEnumWithSpaces
[Enum A]
[Enum B]
[Enum C]
End Enum
如果将其编译为 DLL 并将其作为引用加载到 Visual Studio 2010 中,则在对象浏览器中两个枚举都可见。但是,枚举 values 未针对 TestEnumWithSpaces 显示,并且在 C# 代码中使用智能感知时也未列出。 TestEnumNoSpaces 的值正常列出。
如果我在代码 window 中单击 TestEnumWithSpaces 并 select 转到定义,我得到如下内容:
namespace DLLName
{
[Guid("3DD0C797-2BF0-4A7A-8E1E-83E3095CB3AE")]
public enum TestEnumWithSpaces
{
}
}
对于 TestEnumNoSpaces 同样如此:
namespace DLLName
{
[Guid("9A7152DB-20D7-49D8-8E33-E74F895DFE05")]
public enum TestEnumNoSpaces
{
EnumA = 0,
EnumB = 1,
EnumC = 2,
}
}
这表明相同的事情 - 枚举存在但没有值。
我们可以做些什么来显示枚举值吗?在问题 Spaces in C# Enums 中,为在 C# 中定义的枚举显示了一种方法,但不适用于像我这样通过 COM 互操作导入的枚举。
注意 - 如有必要,我可以修改 VB6 DLL,但这不是首选,因为一堆其他 VB6 代码必须相应地更改。
谢谢
根据@hvd 的建议,我在 VB6 中构建了这个示例:
Public Enum TestEnumWithSpaces
[Enum A] = 0
EnumA = [Enum A]
[Enum B] = 1
EnumB = [Enum B]
[Enum C] = 2
EnumC = [Enum C]
End Enum
这确实按预期工作 - 没有空格的枚举值显示在 C# 中。
我认为这可能是一个可行的选择,因为我们有能力修改 VB6 DLL,尽管一开始维护工作量很大。随着时间的推移,我们的想法是不再添加其中包含空格的新枚举值。
我还没有检查这是否会破坏二进制兼容性,但如果是的话那将是一个缺点,尽管我们可以接受它。