private string? typeOfContract
{
get { return (string?)ViewState["typeOfContract"]; }
set { ViewState["typeOfContract"] = value; }
}
Plus tard dans le code, je l'utilise comme ceci:
typeOfContract = Request.QueryString["type"];
Je reçois l'erreur suivante lors de la déclaration de la ligne typeOfContract
:
Le type 'chaîne' doit être un type de valeur non nullable pour pouvoir être utilisé comme paramètre 'T' dans le type générique ou la méthode 'System.Nullable <T>'
Des idées? En gros, je veux m'assurer que "type"
existe dans QueryString
avant d’effectuer une action.
System.String est un type de référence et déjà "nullable".
Nullable <T> et le? Les suffixes sont pour les types de valeur tels que Int32, Double, DateTime, etc.
Tu compliques les choses. string
est déjà nullable. Vous n'avez pas besoin de le rendre plus nullable. Sortez le ?
sur le type de propriété.
string ne peut pas être le paramètre à Nullable car string n'est pas un type valeur. String est un type de référence.
string s = null;
est une déclaration très valide et il n’est pas nécessaire de la rendre nulle.
private string typeOfContract
{
get { return ViewState["typeOfContract"] as string; }
set { ViewState["typeOfContract"] = value; }
}
devrait fonctionner à cause du mot clé as.
String est un type de référence, vous n'avez donc pas besoin (et ne pouvez pas) utiliser Nullable<T>
ici. Il suffit de déclarer typeOfContract en tant que chaîne et de simplement vérifier la valeur null après l'avoir extraite de la chaîne de requête. Ou utilisez String.IsNullOrEmpty si vous souhaitez gérer des valeurs de chaîne vides identiques à null.
Pour nullable, utilisez ?
avec toutes les C # primitives , sauf pour chaîne.
La page suivante donne une liste des primitives C # : http://msdn.Microsoft.com/en-us/library/aa711900 (v = vs.71) .aspx
Veuillez noter que dans la version à venir 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:
public string? MyNullableString;
this.MyNullableString = null; //Valid
Cependant,
public string MyNonNullableString;
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning.
L'important ici est de montrer l'intention de votre code. Si "l'intention" est que le type de référence puisse être null, alors marquez-le pour qu'il en soit autrement. attribuer une valeur null à non-nullable entraînerait un avertissement du compilateur.
Au modérateur qui supprime toutes les réponses, ne le faites pas. Je crois fermement que cette réponse ajoute de la valeur et que la suppression empêcherait simplement quelqu'un de savoir ce qui est juste à l'époque. Puisque vous avez supprimé toutes les réponses, je vous repasse la réponse ici. Le lien qui a été envoyé concernant les "doublons" est simplement une ouverture de certaines personnes et je ne pense pas que ce soit une recommandation officielle.