Неявное преобразование C# из нуляC#

Место общения программистов C#
Ответить
Anonymous
 Неявное преобразование C# из нуля

Сообщение 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" и сделал только одно из неявных преобразований обнуляемым, но это никак не повлияло на разрешение нуля.
Я не знаю, что еще попробовать.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -from-null
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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