Есть ли способ использовать оператор неявного преобразования из null без указания типа null?C#

Место общения программистов C#
Anonymous
Есть ли способ использовать оператор неявного преобразования из null без указания типа null?

Сообщение Anonymous »

У меня есть структура, в которой я разрешаю неявное преобразование из строки или StringBuilder.

Код: Выделить всё

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 без предварительного приведения NULL к строке или StringBuilder?
Когда я пытаюсь передать значение NULL без приведения его к строке, я получаю сообщение об ошибке

CS0037: невозможно преобразовать значение NULL в «StringParam», поскольку оно не имеет значения NULL. тип значения.

Если я удалю одно из неявных преобразований, эта ошибка исчезнет.
Я попробовал атрибут OverloadResolutionPriority для неявных операторов, но получил ошибку.

CS9262: невозможно использовать для этого атрибут OverloadResolutionPriorityAttribute. член.

Я пытался создать неявный оператор StringParam(object o), который имел бы приоритет над строкой и StringBuilder, но получаю ошибку

CS0553: определяемые пользователем преобразования в базовый тип или из него не допускаются.

Я попробовал поставить "

Код: Выделить всё

#nullable enable
" в классе и сделал только одно из неявных преобразований обнуляемым, но это не повлияло на разрешение нуля.
Я не знаю, что еще попробовать.

Вернуться в «C#»