2015-09-29 23 views
8

Tôi muốn làm cho tên đệm của người tùy chọn. Tôi đã sử dụng phương pháp C# .net code đầu tiên. Đối với kiểu dữ liệu số nguyên của nó dễ dàng chỉ bằng cách sử dụng "?" toán tử để thực hiện trong nullable. Tôi đang tìm một cách để làm cho biến sting của tôi nullable. Tôi đã cố gắng tìm kiếm nhưng không thể tìm ra cách để làm cho nó vô hiệu.làm thế nào để làm cho loại chuỗi nullable

Dưới đây là mã của tôi. Xin đề nghị tôi làm thế nào để làm cho nó 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; } 





} 

Trả lời

26

Chuỗi là loại tham chiếu và luôn có thể vô hiệu hóa, bạn không cần phải làm gì đặc biệt. Chỉ định rằng một kiểu là nullable là cần thiết chỉ cho các kiểu giá trị.

2

Chuỗi không thể mặc định trong C# vì chúng là loại tham chiếu. Bạn chỉ có thể sử dụng public string CMName { get; set; } và bạn sẽ có thể đặt thành null.

+0

Mỗi loại là một đối tượng trong C# (thông qua kế thừa). Lý do 'string' là nullable là vì chúng là trường hợp của một kiểu tham chiếu. – Kapol

+0

Cảm ơn, đó là cách làm rõ hữu ích. Tôi đã cập nhật câu trả lời của mình cho phù hợp. – Tim

0

string loại là loại tham chiếu, do đó nó là giá trị mặc định. Bạn chỉ có thể sử dụng Nullable<T> với các loại giá trị.

public struct Nullable<T> where T : struct 

Điều đó có nghĩa là bất kỳ loại nào được thay thế cho thông số chung thì phải là loại giá trị.

+0

Tôi nghĩ rằng bạn có nghĩa là loại giá trị loại hơn là struct? – Frans

+0

@Frans Tất nhiên. Cảm ơn. – Kapol

1

Không thể tạo loại tham chiếu Nullable. Chỉ có thể sử dụng các loại giá trị trong cấu trúc Nullable. Việc thêm dấu chấm hỏi vào tên loại giá trị làm cho nó không có giá trị. Hai dòng này giống nhau:

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

Như những người khác đã chỉ ra, chuỗi luôn có thể vô hiệu trong C#. Tôi nghi ngờ bạn đang đặt câu hỏi bởi vì bạn không thể để tên đệm là trống hoặc trống? Tôi nghi ngờ vấn đề là với các thuộc tính xác nhận của bạn, rất có thể là RegEx. Tôi không thể phân tích cú pháp đầy đủ RegEx trong đầu nhưng tôi nghĩ rằng RegEx của bạn khẳng định về ký tự đầu tiên có mặt. Tôi có thể sai - RegEx rất khó. Trong mọi trường hợp, hãy thử nhận xét các thuộc tính xác thực của bạn và xem liệu nó có hoạt động hay không, sau đó thêm lại chúng vào một thuộc tính.

0

Bạn không cần phải làm gì cả, modelbinding sẽ chuyển null thành biến không có vấn đề.

2

System.String là một loại tài liệu tham khảo, do đó bạn không cần phải làm bất cứ điều gì như

Nullable<string> 

Nó đã có một giá trị null (tham chiếu null):

string x = null; // No problems here 
Các vấn đề liên quan