У меня есть оболочка 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
}
}
Я пробовал несколько вещей, но пока ничего не получалось:
У меня нет контроля над кодом C #, поэтому я не могу изменить перечисление, чтобы иметь значение none или что-то подобное.
Обнуляемые типы не получают никакой любви к синтаксису в 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);
}
Других решений пока нет …