Pourquoi j'obtiens l'erreur "Le type 'string' doit être un type de valeur non Nullable pour pouvoir l'utiliser comme paramètre 'T' dans le type ou la méthode générique '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
est déjà nullable.Réponses:
Utilisez
string
plutôt questring?
partout dans votre code.le
Nullable<T>
type nécessite que T soit un type valeur non nullable, par exempleint
ouDateTime
. Les types de référence commestring
peuvent déjà être nuls. Il ne servirait à rien d'autoriser des choses tellesNullable<string>
que cela est interdit.De plus, si vous utilisez C # 3.0 ou version ultérieure, vous pouvez simplifier votre code en utilisant des propriétés implémentées automatiquement :
la source
string
est un type de référence, une classe. Vous ne pouvez utiliserNullable<T>
ou leT?
sucre syntaxique C # avec des types de valeur non nullables tels queint
etGuid
.En particulier, tout comme
string
un type référence, une expression de typestring
peut déjà être nulle:la source
System.String
(avec S majuscule) est déjà nullable, vous n'avez pas besoin de le déclarer comme tel.(string? myStr)
est faux.la source
Pour une raison très spécifique, Type
Nullable<int>
placez votre curseur sur Nullable et appuyez sur F12 - Les métadonnées fournissent la raison (notez la contrainte de structure):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
la source
Nullable<Nullable<int>>
n'est pas autorisé même s'ilNullable<int>
s'agit d'une structure.Veuillez noter que dans la prochaine version de C # qui est 8, les réponses ne sont pas vraies.
All the reference types are non-nullable by default
et vous pouvez réellement faire ce qui suit:cependant,
L'important ici est de montrer l'intention de votre code. Si l '"intention" est que le type de référence peut être nul, marquez-le de manière à ce que l'attribution d'une valeur nulle à non nullable entraînerait un avertissement du compilateur.
Plus d'informations
la source