繁体   English   中英

从C ++ / CLI const向C#枚举赋值

[英]Assign value to C# enum from C++/CLI const

我搜索了与该主题相似的其他答案,但没有找到完全相关的内容。 我正在尝试使用在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#枚举作为参数类型,以确保仅传递有效值。关于如何进行此项工作的任何想法或关于替代设计的建议?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM