С# ошибка с нулевой строкой

private string? typeOfContract
{
  get { return (string?)ViewState["typeOfContract"]; }
  set { ViewState["typeOfContract"] = value; }
}

Позже в коде я использую его следующим образом:

typeOfContract = Request.QueryString["type"];

Я получаю следующую ошибку при объявлении строки typeOfContract:

Тип 'string' должен быть невообразимым типом значения, чтобы использовать это как параметр "Т" в общем типе или методе 'System.Nullable < Т > '

Любые идеи? В принципе, я хочу убедиться, что "type" существует в QueryString перед выполнением действия.

Ответ 1

System.String является ссылочным типом и уже "обнуляется".

Nullable <T> и? суффикс для типов значений, таких как Int32, Double, DateTime и т.д.

Ответ 2

Вы делаете это сложным. string уже имеет значение NULL. Вам не нужно указывать значение больше. Выньте ? в свойстве свойства.

Ответ 3

Строка

не может быть параметром Nullable, потому что строка не является типом значения. Строка является ссылочным типом.

string s = null; 

- очень действительный оператор, и нет необходимости делать его допустимым.

private string typeOfContract
    {
      get { return ViewState["typeOfContract"] as string; }
      set { ViewState["typeOfContract"] = value; }
    }

должен работать из-за ключевого слова как.

Ответ 4

Строка является ссылочным типом, поэтому вам не нужно (и не может) использовать Nullable<T> здесь. Просто объявите typeOfContract как строку и просто проверьте значение null после получения его из строки запроса. Или используйте String.IsNullOrEmpty, если вы хотите обрабатывать пустые строковые значения так же, как null.

Ответ 5

Для обнуления используйте ? со всеми примитивами С#, за исключением строки.

На следующей странице приведен список примитивов С#: http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx