¿Por qué obtengo el error "El tipo 'string' debe ser un tipo de valor no anulable para poder usarlo como parámetro 'T' en el tipo genérico o método 'System.Nullable'"?
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; }
}
}
}
String
Ya es anulable.Respuestas:
Use en
string
lugar destring?
en todos los lugares de su código.El
Nullable<T>
tipo requiere que T sea un tipo de valor no anulable, por ejemploint
oDateTime
. Los tipos de referencia comostring
ya pueden ser nulos. No tendría sentido permitir cosas así,Nullable<string>
por lo que no se permite.Además, si está utilizando C # 3.0 o posterior, puede simplificar su código utilizando propiedades implementadas automáticamente :
fuente
string
es un tipo de referencia, una clase. Solo puede usarNullable<T>
elT?
azúcar sintáctico C # con tipos de valores no anulables comoint
yGuid
.En particular, como
string
es un tipo de referencia, una expresión de tipostring
ya puede ser nula:fuente
System.String
(con mayúscula S) ya es anulable, no necesita declararlo como tal.(string? myStr)
Está Mal.fuente
Por una razón muy específica, escriba
Nullable<int>
su cursor en Nullable y presione F12: los metadatos proporcionan la razón (tenga en cuenta la restricción de estructura):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
fuente
Nullable<Nullable<int>>
no está permitido aunqueNullable<int>
sea una estructura.Tenga en cuenta que en la próxima versión de C #, que es 8, las respuestas no son ciertas.
All the reference types are non-nullable by default
y puedes hacer lo siguiente:Sin embargo,
Lo importante aquí es mostrar la intención de su código. Si la "intención" es que el tipo de referencia puede ser nulo, márquelo para que, de lo contrario, asignar un valor nulo a no anulable resulte en una advertencia del compilador.
Más información
fuente