Присвойте значение перечислению 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.