web-dev-qa-db-fra.com

Comment puis-je rendre ma propriété de chaîne nullable?

Je veux que le deuxième prénom de la personne soit optionnel. J'ai utilisé la première approche de code C # .net. Pour les types de données entiers, rien de plus simple en utilisant ? opérateur à rendre nullable. Je cherche un moyen de rendre ma variable d’aiguille nulle. J'ai essayé de chercher mais je n'ai pas trouvé le moyen de le rendre nul.

Ci-dessous mon code. S'il vous plaît, suggérez-moi comment le rendre nul.

public class ChildrenInfo
{
    [Key]
    public int ChidrenID { get; set; }

    [Required]
    [Display(Name ="First Name")]
    [StringLength(50,ErrorMessage ="First Name cannot exceed more than 50 characters")]
    [RegularExpression(@"^[A-Z]+[a-z]*$",ErrorMessage ="Name cannot have special character,numbers or space")]
    [Column("FName")]
    public string CFName { get; set; }

    [Display(Name ="Middle Name")]
    [RegularExpression(@"^[A-Z]+[a-z]*$",ErrorMessage ="Middle Name cannot have special character,numbers or space")]
    [StringLength(35,ErrorMessage ="Middle Name cannot have more than 35 characters")]
    [Column("MName")]
    public string? CMName { get; set; }
}   
39
Sabin Kumar Sharma

String est un type de référence et toujours nullable, vous n'avez rien de spécial à faire. Spécifier qu'un type est nullable n'est nécessaire que pour les types de valeur.

98
aw04

System.String est un type de référence, vous n'avez donc rien à faire.

Nullable<string>

Il a déjà une valeur nulle (la référence nulle):

string x = null; // No problems here
8
Kashif Mustafa

De toute façon, les chaînes sont nulles en C # car ce sont des types de référence. Vous pouvez simplement utiliser public string CMName { get; set; } et vous pourrez le définir sur null.

5
Tim

Comme d'autres l'ont souligné, la chaîne est toujours nullable en C #. Je suppose que vous posez la question parce que vous ne pouvez pas laisser le deuxième prénom comme nul ou en blanc? Je soupçonne que le problème vient de vos attributs de validation, très probablement du RegEx. Je ne parviens pas à analyser complètement RegEx dans ma tête, mais je réfléchis votre RegEx insiste sur la présence du premier caractère. Je peux me tromper - RegEx est difficile. Dans tous les cas, essayez de commenter vos attributs de validation et voyez si cela fonctionne, puis rajoutez-les un à un.

1
Frans

après c # 8. publié, vous pouvez également faire référence à des types pour rendre nullable. Pour cela, vous devez ajouter

#nullable enable

fonctionnalité sur votre espace de noms. C'est détaillé ici

par exemple, quelque chose comme ceci fonctionnera:

#nullable enable
namespace TestCSharpEight
{
  public class Developer
  {
    public string FullName { get; set; }
    public string UserName { get; set; }

    public Developer(string fullName)
    {
        FullName = fullName;
        UserName = null;
    }
}}

Aussi, vous pouvez jeter un oeil cet article de Nice de John Skeet qui explique les détails.

1
nzrytmn

string type est un type de référence, il est donc nullable par défaut. Vous ne pouvez utiliser que Nullable<T> avec des types de valeur.

public struct Nullable<T> where T : struct

Ce qui signifie que quel que soit le type remplacé pour le paramètre générique, il doit s'agir d'un type de valeur.

0
Kapol

Vous n'avez rien à faire, le modelbinding passera null à variable sans problèmes.

0
Renato Leite

Il n'est pas possible de rendre les types de référence Nullable. Seuls les types de valeur peuvent être utilisés dans une structure Nullable. L'ajout d'un point d'interrogation à un nom de type de valeur le rend nullable. Ces deux lignes sont les mêmes:

int? a = null;
Nullable<int> a = null;
0
Vova