2012-02-10 24 views
132

¿Por qué obtengo un error? El tipo 'cadena' debe ser un no -nombre de valor acumulable para usarlo como parámetro 'T' en el tipo genérico o método 'System.Nullable' "?El tipo 'cadena' debe ser un tipo no anulable para usarlo como parámetro T en el tipo genérico o método 'System.Nullable <T>'

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using Universe; 

namespace Universe 
{ 
    public class clsdictionary 
    { 
     private string? m_Word = ""; 
     private string? m_Meaning = ""; 

     string? Word { 
      get { return m_Word; } 
      set { m_Word = value; } 
     } 

     string? Meaning { 
      get { return m_Meaning; } 
      set { m_Meaning = value; } 
     } 
    } 
} 
+15

'String' ya puede contener nulos. –

+19

No hay razón para que esta pregunta reciba un -1. Aparte de la posibilidad de ser un dup. –

Respuesta

164

Uso string en lugar de string? en todos los lugares en su código.

El tipo Nullable<T> requiere que T sea un tipo de valor que no admite nulos, por ejemplo int o DateTime. Los tipos de referencia como string ya pueden ser nulos. No tendría sentido permitir cosas como Nullable<string>, por lo que no está permitido.

Además, si usted está usando C# 3.0 o posterior se puede simplificar el código mediante el uso de auto-implemented properties:

public class WordAndMeaning 
{ 
    public string Word { get; set; } 
    public string Meaning { get; set; } 
} 
+1

M.Bajo, cuando hago m_Word = null, ¿hay alguna sugerencia? Quiero poder establecer que Word sea nulo. – MiscellaneousUser

+1

@MiscellaneousUser: ¿Qué mensaje de error recibes? ¿Puedes publicar el archivo exacto que intentaste compilar? Es difícil adivinar cuál es tu error al ver solo una línea de tu código. Quiero decir que podría ser que te falta un punto y coma ... pero tal vez simplemente te olvidaste de copiarlo y pegarlo ... No es más que conjeturas hasta que publiques el código que intentaste compilar. –

+0

Gracias por la ayuda, vio esta publicación http://stackoverflow.com/questions/187406/c-sharp-nullable-string-error y puede ver que el signo de interrogación es solo para tipos de valores. – MiscellaneousUser

46

string es un tipo de referencia, una clase. Solo puede usar Nullable<T> o T? C# syntactic sugar con valores que no admiten nulos tipos como int y Guid.

En particular, como string es un tipo de referencia, una expresión de tipo string ya puede ser nulo:

string lookMaNoText = null; 
3

Por una razón muy específico tipo Nullable<int> poner el cursor sobre anulable y golpeó F12 - La metadatos proporcionan la razón (Tenga en cuenta la limitación struct):

public struct Nullable<T> where T : struct 
{ 
... 
} 

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+4

Tenga en cuenta que 'Nullable >' no se permite aunque 'Nullable ' es una estructura. –

+0

Eso es interesante. ¿Eso está "codificado" en el compilador? ¿Cómo se limita desde una estructura específica (Nullable >)? - Editar Ahora veo que aparentemente es especial - Error de compilación ... debe ser un tipo de valor que no admite nulos .... –

11

Syst em.String ya puede contener nulos: no es necesario que lo declares como tal (¿cadena? myStr) está mal.

Cuestiones relacionadas