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; }
}
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.
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
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.
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.
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.
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.
Vous n'avez rien à faire, le modelbinding passera null à variable sans problèmes.
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;