Присвойте значение перечислению C# из C++/CLI const

Я искал другие ответы, похожие на эту тему, но не нашел ничего полностью релевантного. Я пытаюсь присвоить значения некоторым перечислениям в C#, используя значения, помеченные как статические константы в файле C++/CLI, которые компилируются в 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# в качестве типа параметра в некоторых вызовах методов, чтобы обеспечить передачу только допустимых значений. Есть идеи, как это сделать, или предложения по альтернативным проектам?

1 ответ

Решение

C++ const Ключевое слово не сопоставляется ни с чем в.NET.

C++ / CLI добавляет новые контекстно-зависимые ключевые слова для соответствия функциональности.NET: initonly а также literal,

Если вы используете literal System::Int32 VALUE = 200; тогда это должно работать. Нет ничего волшебного в том, чтобы заставить компилятор C# определять перечисления, используя значения, которые не помечены как "литеральные" в метаданных.NET.

Другие вопросы по тегам