2015-09-29 23 views
8

Desidero rendere facoltativo il secondo nome della persona. Ho usato il primo approccio al codice C# .net. Per i dati interi, digitare semplicemente è semplice utilizzando "?" operatore da rendere in nullable. Sto cercando un modo per rendere nullable la mia variabile di puntura. Ho provato a cercare ma non ho trovato il modo di renderlo nullable.come rendere il tipo di stringa nullable

Di seguito è riportato il mio codice. Per favore suggeriscimi come renderlo nullable.

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





} 

risposta

26

La stringa è un tipo di riferimento e sempre annullabile, non è necessario fare nulla di speciale. Specificare che un tipo è annullabile è necessario solo per i tipi di valore.

2

Le stringhe sono nulle in C# perché sono tipi di riferimento. Puoi semplicemente usare public string CMName { get; set; } e sarai in grado di impostarlo su null.

+0

Ogni tipo è un oggetto in C# (attraverso l'ereditarietà). La ragione per cui 'stringa' è nullable è perché sono istanze di un tipo di riferimento. – Kapol

+0

Grazie, questo è un utile chiarimento. Ho aggiornato la mia risposta di conseguenza. – Tim

0

string type è un tipo di riferimento, pertanto per impostazione predefinita è annullabile. È possibile utilizzare solo Nullable<T> con tipi di valore.

public struct Nullable<T> where T : struct 

Ciò significa che qualsiasi tipo di parametro viene sostituito per il parametro generico, deve essere un tipo di valore.

+0

Penso che intendessi tipo di tipo di valore piuttosto che struct? – Frans

+0

@Frans Naturalmente. Grazie. – Kapol

1

Non è possibile rendere i tipi di riferimento Nullable. Solo i tipi di valore possono essere utilizzati in una struttura Nullable. L'aggiunta di un punto interrogativo a un nome del tipo di valore lo rende annullabile. Queste due righe sono le stesse:

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

Come altri hanno sottolineato, la stringa è sempre annullabile in C#. Sospetto che tu stia facendo la domanda perché non sei in grado di lasciare il secondo nome come vuoto o vuoto? Sospetto che il problema riguardi gli attributi di convalida, molto probabilmente il RegEx. Non sono in grado di analizzare completamente RegEx nella mia testa ma I pensa allo il tuo RegEx insiste sul primo carattere presente. Potrei sbagliarmi: RegEx è difficile. In ogni caso, prova a commentare gli attributi di convalida e vedi se funziona, quindi aggiungili di nuovo in uno alla volta.

0

Non è necessario fare nulla, il modelbinding passerà da null a variabile senza problemi.

2

System.String è un tipo di riferimento in modo che non c'è bisogno di fare qualcosa di simile

Nullable<string> 

Ha già un valore nullo (il riferimento null):

string x = null; // No problems here 
Problemi correlati