Код: Выделить всё
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Я не знаю, что еще попробовать.