2015-09-29 5 views
8

Ich möchte den zweiten Vornamen der Person optional machen. Ich habe C# .net Code zuerst Ansatz verwendet. Für ganzzahligen Datentyp ist es einfach, indem Sie "?" Operator in Nullable machen. Ich bin auf der Suche nach einer Möglichkeit, meinen Stachel variabel nullbar zu machen. Ich habe versucht zu suchen, aber ich konnte nicht den Weg finden, es NULL-fähig zu machen.wie man string type machen kann nullable

Unten ist mein Code. Bitte schlage mir vor, wie man es NULL machen kann.

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; } 





} 

Antwort

26

String ist ein Referenztyp und immer Nullwert, Sie müssen nichts Besonderes tun. Die Angabe, dass ein Typ nullfähig sein kann, ist nur für Werttypen erforderlich.

2

Zeichenketten sind in C# trotzdem nullbar, da es sich um Referenztypen handelt. Sie können einfach public string CMName { get; set; } verwenden und Sie können es auf null setzen.

+0

Jeder Typ ist ein Objekt in C# (durch Vererbung). Der Grund dafür, dass die Zeichenfolgen Nullwerte enthalten können, ist, dass sie Instanzen eines Referenztyps sind. – Kapol

+0

Danke, das ist eine hilfreiche Klarstellung. Ich habe meine Antwort entsprechend aktualisiert. – Tim

0

string Typ ist ein Referenztyp, daher ist er standardmäßig nullwertfähig. Sie können Nullable<T> nur mit Werttypen verwenden.

Das bedeutet, dass der Typ, der für den generischen Parameter ersetzt wird, ein Werttyp sein muss.

+0

Ich denke, Sie meinten Wert Typ lieber als Struktur? – Frans

+0

@Frans Natürlich. Vielen Dank. – Kapol

1

Es ist nicht möglich Referenztypen Nullable zu machen. In einer Nullable-Struktur können nur Werttypen verwendet werden. Wenn Sie ein Fragezeichen an einen Werttyp-Namen anhängen, wird es als Nullwert angezeigt. Diese zwei Zeilen sind identisch:

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

Wie bereits erwähnt wurde, ist String in C# immer Nullable. Ich vermute, dass Sie die Frage stellen, weil Sie den zweiten Vornamen nicht als null oder leer zurücklassen können. Ich vermute, dass das Problem mit Ihren Validierungsattributen zusammenhängt, höchstwahrscheinlich mit der RegEx. Ich bin nicht in der Lage, RegEx vollständig in meinem Kopf zu analysieren, aber ich denke Ihre RegEx besteht darauf, dass das erste Zeichen vorhanden ist. Ich könnte falsch liegen - RegEx ist schwer. Versuchen Sie auf jeden Fall, Ihre Validierungsattribute zu kommentieren und zu überprüfen, ob sie funktioniert, und fügen Sie sie einzeln nacheinander hinzu.

0

Sie müssen nichts tun, die Modelbinding wird Null auf Variable ohne Probleme übergeben.

2

System.String ist ein Referenztyp, damit Sie nicht tun müssen, hat es so etwas wie

Nullable<string> 

bereits einen Nullwert (der Null-Referenz):

string x = null; // No problems here