Код: Выделить всё
public ref struct StringParam
{
private string s;
private StringBuilder sb;
public static implicit operator StringParam(string s)
{
return new StringParam { s = s };
}
public static implicit operator StringParam(StringBuilder sb)
{
return new StringParam { sb = sb };
}
public override string ToString()
{
return s ?? sb?.ToString();
}
}
Когда я пытаюсь передать значение NULL без приведения его к строке, я получаю сообщение об ошибке CS0037: невозможно преобразовать значение NULL в «StringParam», поскольку это тип значения, не допускающий значения NULL. Если я удалю одно из неявных преобразований, эта ошибка исчезнет.
Я попробовал атрибут OverloadResolutionPriority для неявных операторов, но получил ошибку CS9262: невозможно использовать OverloadResolutionPriorityAttribute для этого элемента.
Я пытался создать неявный оператор StringParam(object o), который имел бы приоритет над строкой и StringBuilder, но Я получаю сообщение об ошибке CS0553: определяемые пользователем преобразования в базовый тип или из него запрещены.
Я попробовал добавить в класс "#nullable Enable" и сделал только одно из неявных преобразований обнуляемым, но это никак не повлияло на разрешение нуля.
Я не знаю, что еще попробовать.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -from-null
Мобильная версия