从C ++ / CLI const为C#enum赋值

时间:2016-03-11 22:15:57

标签: c# enums c++-cli const mixed-mode

我搜索了与此主题相似的其他答案,但没有发现任何完全相关的内容。我正在尝试使用在C ++ / CLI文件中标记为静态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#文件:

public enum LoggerLevel {
  SevereLevel = SEVERE_LEVEL.VALUE  // This gives the "must be constant" error
}

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

1 个答案:

答案 0 :(得分:0)

C ++ const关键字不会映射到.NET中的任何内容。

C ++ / CLI添加了新的上下文相关关键字以匹配.NET功能:initonlyliteral

如果你使用literal System::Int32 VALUE = 200;那么它应该可行。使用在.NET元数据中未标记为“literal”的值来使C#编译器定义枚举是没有魔力的。