Отправка нуля из C++/CLI в управляемый C#
У меня есть оболочка C++/CLI, чтобы иметь возможность вызывать код C#. В коде C# у меня есть метод, который принимает в качестве параметра перечисляемое значение null, но я не могу понять, как я могу вызвать этот метод с нулевым параметром из моей оболочки.
C# метод:
public int DoSomething(MyEnum? option)
{
if (option != null)
//Do something
else
//Do something else
}
Функция C++, вызывающая DoSomething():
int MyMethod(int option)
{
int myVal;
if (option > -1)
{
myVal = component->DoSomething((CSharpNameSpace::MyEnum)option); //This works
}
else
{
myVal = component->DoSomething(??); //I want to send null here
}
}
Я пробовал несколько вещей, но пока ничего не получалось:
- Отправка 0, NULL или nullptr не скомпилируется
- (CSharpNameSpace::MyEnum)NULL, конечно, устанавливает значение в 0
У меня нет контроля над кодом C#, поэтому я не могу изменить перечисление, чтобы иметь значение none или что-то подобное.
1 ответ
Обнуляемые типы не получают никакой любви к синтаксису в C++/CLI, в отличие от C#. Основное препятствие, с которым вы сталкиваетесь, заключается в том, что не существует неявного преобразования из nullptr в Nullable. Простой способ - использовать конструктор по умолчанию:
int MyMethod(int option)
{
Nullable<ClassLibrary1::MyEnum> enu;
if (option > -1) enu = safe_cast<ClassLibrary1::MyEnum>(option);
return component->DoSomething(enu);
}