将值从C+分配给C#enum+/CLI常量

将值从C+分配给C#enum+/CLI常量,c#,enums,c++-cli,constants,mixed-mode,C#,Enums,C++ Cli,Constants,Mixed Mode,我已经搜索了与本主题类似的其他答案,但没有找到任何完全相关的答案。我试图使用C++/CLI文件中标记为static const的值为C#中的某些枚举赋值,这些值被编译成DLL并在C#项目中引用。所有这些都很好,只是它给了我一个“分配给'XXX'的表达式必须是常量”,如果C++/CLI值不是常量,我会想到这一点。我的C++/CLI代码是从第三方供应商提供的文件自动生成的,因此我更改这方面的选项非常有限 以下是一些摘录: C++/CLI文件: public ref class SEVERE_LEVE

我已经搜索了与本主题类似的其他答案,但没有找到任何完全相关的答案。我试图使用C++/CLI文件中标记为static const的值为C#中的某些枚举赋值,这些值被编译成DLL并在C#项目中引用。所有这些都很好,只是它给了我一个“分配给'XXX'的表达式必须是常量”,如果C++/CLI值不是常量,我会想到这一点。我的C++/CLI代码是从第三方供应商提供的文件自动生成的,因此我更改这方面的选项非常有限

以下是一些摘录:

C++/CLI文件:

public ref class SEVERE_LEVEL sealed {
  public: 
    static const System::Int32 VALUE = 200;
  private:
    SEVERE_LEVEL() {}
};
和C#文件:


有几个不同的日志级别,每个级别在C++/CLI文件中各自的单独类中定义。我想在一些方法调用中使用C#enum作为参数类型,以确保只传入有效值。有什么想法,如何在替代设计上提出这项工作或建议?

< P> C++ >代码> const <代码>关键字没有映射到.NET.< /P>中的任何内容。 C++/CLI添加新的上下文敏感关键字以匹配.NET功能:
initonly
literal


如果使用
literal System::Int32 VALUE=200那么它应该可以工作了。让C#编译器使用.NET元数据中未标记为“literal”的值来定义枚举没有什么神奇之处。

这是一个非常奇怪的代码生成器。我只是尝试插入一个
公共enum类
声明,就像它应该做的那样。谢谢你的建议!我将自动生成的类封装在一个新的C++类中,该类包含标记为“文字”关键字的成员,这些集合与先前的静态const成员相等。这使我可以将它们分配到C#中的枚举,非常好。谢谢
public enum LoggerLevel {
  SevereLevel = SEVERE_LEVEL.VALUE  // This gives the "must be constant" error
}