Le type 'string' doit être un non-type nullable afin de l'utiliser comme paramètre T dans le générique du type ou de la méthode 'Système.Nullable<T>'
Pourquoi j'obtiens l'Erreur "Le type" chaîne "doit être un non nullable type de valeur afin de l'utiliser comme paramètre" T " dans le générique du type ou de la méthode 'Système.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
est déjà nullable.
Vous devez vous connecter pour publier un commentaire.
Utilisation
string
au lieu destring?
dans tous les endroits dans votre code.La
Nullable<T>
type, il faut que T est un non nullable type de la valeur, par exempleint
ouDateTime
. Les types de référence commestring
peut déjà être null. Il n'y aurait pas de point en permettant à des choses commeNullable<string>
de sorte qu'il n'est pas autorisé.Aussi, si vous êtes à l'aide de C# 3.0 ou version ultérieure, vous pouvez simplifier votre code à l'aide de les propriétés implémentées automatiquement:
string
est un type de référence, une classe. Vous ne pouvez utiliserNullable<T>
ou laT?
C# sucre syntaxique avec non nullable valeur types commeint
etGuid
.En particulier, comme
string
est un type de référence, une expression de typestring
peut-être déjà null:Système.La chaîne est déjà nullable : vous n'avez pas besoin de le déclarer comme tel (chaîne de caractères? myStr) est erroné.
Pour une raison bien précise du Type de
Nullable<int>
placez votre curseur sur les valeurs null et tapez F12 - Les Métadonnées fournit la raison (Note de la structure de la contrainte):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
Nullable<Nullable<int>>
est rejetée, même siNullable<int>
est une struct.Veuillez noter que, dans la prochaine version de C# qui est de 8, les réponses ne sont pas vraies.
All the reference types are non-nullable by default
et vous pouvez effectuer les opérations suivantes:Cependant,
La chose importante ici est de montrer l'intention de votre code.
Si "l'intention", c'est que le type de référence peut être null, marquer, sinon affectation de valeur nulle de non nullable aurait pour résultat d'avertissement du compilateur.
Plus d'infos