2008-10-09 10 views
135
private string? typeOfContract 
{ 
    get { return (string?)ViewState["typeOfContract"]; } 
    set { ViewState["typeOfContract"] = value; } 
} 

Más adelante en el código lo uso como esto:C error # cadena anulable

typeOfContract = Request.QueryString["type"]; 

estoy recibiendo el siguiente error en la declaración de typeOfContract línea que indica:

El tipo ' string 'debe ser un tipo de valor que no admite nulos para usar como el parámetro' T 'en el tipo genérico o método ' System.Nullable < T> '

¿Alguna idea? Básicamente, quiero asegurarme de que "type" existe en el QueryString antes de realizar una acción.

Respuesta

303

System.String es un tipo de referencia y ya es "anulable".

Nullable < T> y la? sufijo son para tipos de valor como Int32, Double, DateTime, etc.

+13

Una cosa a destacar: Posibilidad de nulos es un mismo tipo de valor, pero la "estructura" tipo de restricción genérica sólo incluye los tipos de valor no anulable - Entonces no puedes hacer Nullable >. –

39

Lo está complicando. string ya puede contener nulos. No es necesario que sea más nullable. Tome el ? en el tipo de propiedad.

19

cadena no puede ser el parámetro de Nullable porque cadena no es un tipo de valor. String es un tipo de referencia.

string s = null; 

es una declaración muy válida y no es necesario que sea anulable.

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

debería funcionar debido a la como palabra clave.

13

Cadena es un tipo de referencia, por lo que no necesita (y no puede) utilizar Nullable<T> aquí. Simplemente declare typeOfContract como una cadena y simplemente busque null después de obtenerlo de la cadena de consulta. O use String.IsNullOrEmpty si desea manejar valores de cadenas vacías igual que null.

4

Para anulables, use ? con todas las primitivas C#, excepto la cuerda.

La siguiente página ofrece una lista de los C# primitivas: http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx

+1

El enlace está roto Gracias –

+0

Gracias Mina, encontré un enlace diferente y actualicé la referencia. –

+1

No solo funcionan las primitivas, todos los tipos de valores que no admiten nulos (que no son manejados especialmente por .NET). – IllidanS4

Cuestiones relacionadas