Отправка нуля из 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);
}
Другие вопросы по тегам