从 C++/CLI const 为 C# 枚举赋值
Assign value to C# enum from C++/CLI const
我搜索了与此主题类似的其他答案,但没有找到任何完全相关的内容。我正在尝试为 C# 中的某些枚举分配值,使用在 C++/CLI 文件中标记为 static const 的值,这些值被编译到 DLL 中并在 C# 项目中引用。所有这些都工作正常,除了它给了我 "The expression being assigned to 'XXX' must be constant",这是我期望的,如果 C++/CLI 值不是常量的话。我的 C++/CLI 代码是从第 3 方供应商提供的文件自动生成的,因此我更改该方面的选项非常有限。
以下是一些摘录:
C++/CLI 文件:
public ref class SEVERE_LEVEL sealed {
public:
static const System::Int32 VALUE = 200;
private:
SEVERE_LEVEL() {}
};
和 C# 文件:
public enum LoggerLevel {
SevereLevel = SEVERE_LEVEL.VALUE // This gives the "must be constant" error
}
有几个不同的日志级别,每个级别都在 C++/CLI 文件中各自单独的 class 中定义。我想在某些方法调用中使用 C# 枚举作为参数类型,以确保只传入有效值。关于如何实现此工作的任何想法或对替代设计的建议?
C++ const
关键字未映射到 .NET 中的任何内容。
C++/CLI 添加新的上下文相关关键字以匹配 .NET 功能:initonly
和 literal
.
如果您使用 literal System::Int32 VALUE = 200;
那么它应该可以工作。让 C# 编译器使用 .NET 元数据中未标记 "literal" 的值来定义枚举并不神奇。
我搜索了与此主题类似的其他答案,但没有找到任何完全相关的内容。我正在尝试为 C# 中的某些枚举分配值,使用在 C++/CLI 文件中标记为 static const 的值,这些值被编译到 DLL 中并在 C# 项目中引用。所有这些都工作正常,除了它给了我 "The expression being assigned to 'XXX' must be constant",这是我期望的,如果 C++/CLI 值不是常量的话。我的 C++/CLI 代码是从第 3 方供应商提供的文件自动生成的,因此我更改该方面的选项非常有限。
以下是一些摘录:
C++/CLI 文件:
public ref class SEVERE_LEVEL sealed {
public:
static const System::Int32 VALUE = 200;
private:
SEVERE_LEVEL() {}
};
和 C# 文件:
public enum LoggerLevel {
SevereLevel = SEVERE_LEVEL.VALUE // This gives the "must be constant" error
}
有几个不同的日志级别,每个级别都在 C++/CLI 文件中各自单独的 class 中定义。我想在某些方法调用中使用 C# 枚举作为参数类型,以确保只传入有效值。关于如何实现此工作的任何想法或对替代设计的建议?
C++ const
关键字未映射到 .NET 中的任何内容。
C++/CLI 添加新的上下文相关关键字以匹配 .NET 功能:initonly
和 literal
.
如果您使用 literal System::Int32 VALUE = 200;
那么它应该可以工作。让 C# 编译器使用 .NET 元数据中未标记 "literal" 的值来定义枚举并不神奇。