Быстрый ответ, нет.
Более длинный ответ, пока нет.
Прямо сейчас, до выпуска C # 8 (ну, если вы не используете предварительный просмотр C # 8, т. Е.), Символ ?
, когда он используется для указания обнуляемых ссылочных типов, является синтаксической ошибкой. Давайте пока проигнорируем C # 8.
type?
переводится в Nullable<type>
, а структура Nullable<T>
объявляется так:
public struct Nullable<T> where T : struct
Другими словами, T
не может быть string
, так что это, string?
, недопустимо. Это то, что дает вам синтаксическую ошибку.
Пока не будет выпущен C # 8 или вы не начнете использовать предварительный просмотр C # 8, вы ничего не сможете сделать, кроме удаления знака вопроса.
Что происходит при выходе C # 8?
Ну, type?
для ссылочных типов не будет переводиться в Nullable<T>
, а вместо этого в T
со знанием об обнуляемости. Для полей, свойств, параметров, возвращаемых типов, в основном всего, что не является локальной переменной, это преобразуется в объявление с атрибутом, устанавливающим обнуляемость. Для локальных переменных компилятор будет отслеживать обнуляемость.
Таким образом, в этом случае string.IsNullOrEmpty
будет фактически работать, потому что параметр по-прежнему будет в основном строкой, это будет просто строка со знанием обнуления, прикрепленной к нему.