Erro de cadeia anulável C #

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

Mais tarde no código eu uso assim:

 typeOfContract = Request.QueryString["type"]; 

Estou recebendo o seguinte erro na declaração da linha typeOfContract informando:

O tipo ‘string’ deve ser um tipo de valor não anulável para usá-lo como parâmetro ‘T’ no tipo genérico ou método ‘System.Nullable ‘

Alguma ideia? Basicamente, quero ter certeza de que "type" existe no QueryString antes de executar uma ação.

System.String é um tipo de referência e já “anulável”.

Nullable e o? sufixo são para tipos de valor como Int32, Double, DateTime, etc.

Você está fazendo isso complicado. string já é anulável. Você não precisa torná-lo mais anulável. Tire o ? no tipo de propriedade.

string não pode ser o parâmetro para Nullable porque string não é um tipo de valor. String é um tipo de referência.

 string s = null; 

é uma declaração muito válida e não há necessidade de torná-la anulável.

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

deve funcionar por causa da palavra-chave as.

String é um tipo de referência, então você não precisa (e não pode) usar Nullable aqui. Apenas declare typeOfContract como string e simplesmente verifique por null após obtê-lo da string de consulta. Ou use String.IsNullOrEmpty se você quiser manipular valores de string vazios da mesma forma que null.

Para anulável, use ? com todas as primitivas C # , exceto para string.

A seguinte página fornece uma lista das primitivas C # : http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx