2009-05-29 32 views
10

Vì vậy, tôi có một cái gì đó như thế nàyTrở loại chuỗi nullable

public string? SessionValue(string key) 
{ 
    if (HttpContext.Current.Session[key].ToString() == null || HttpContext.Current.Session[key].ToString() == "") 
     return null; 

    return HttpContext.Current.Session[key].ToString(); 
} 

mà không biên dịch.

Làm cách nào để trả về loại chuỗi có thể bị vô hiệu?

Trả lời

30

Chuỗi đã là một loại không có giá trị. Nullable chỉ có thể được sử dụng trên ValueTypes. Chuỗi là loại tham chiếu.

Chỉ cần loại bỏ "?" và bạn nên làm tốt!

0

Bạn có thể gán giá trị null cho một chuỗi từ loại tham chiếu của nó, bạn không cần phải làm cho nó có thể vô hiệu.

0

Chuỗi đã là một loại không có giá trị. Bạn không cần '?'.

Lỗi 18 Loại 'string' phải là một loại giá trị không nullable để sử dụng nó như tham số 'T' trong chung loại hoặc phương pháp 'System.Nullable'

-1

string đã không thể tự hoạt động.

4

Như mọi người khác đã nói, string không cần ? (là lối tắt cho Nullable<string>) bởi vì tất cả các loại tham chiếu (class es) đều không có giá trị. Nó chỉ áp dụng cho loại giá trị (struct s).

Ngoài ra, bạn không nên gọi ToString() trên giá trị phiên trước khi bạn kiểm tra xem đó là null (hoặc bạn có thể nhận được NullReferenceException). Ngoài ra, bạn không cần phải kiểm tra kết quả của ToString() cho null vì nó không bao giờ nên trả lại null (nếu được triển khai chính xác). Và bạn có chắc chắn muốn trả lại null nếu giá trị phiên là trống string ("")?

này tương đương với những gì bạn có nghĩa là để viết:

public string SessionValue(string key) 
{ 
    if (HttpContext.Current.Session[key] == null) 
     return null; 

    string result = HttpContext.Current.Session[key].ToString(); 
    return (result == "") ? null : result; 
} 

Mặc dù tôi sẽ viết nó như thế này (trở rỗng string nếu đó là những gì giá trị phiên chứa):

public string SessionValue(string key) 
{ 
    object value = HttpContext.Current.Session[key]; 
    return (value == null) ? null : value.ToString(); 
} 
+0

"bởi vì tất cả loại tham chiếu (lớp) đã được vô hiệu. " -> Không có vẻ như vậy. 'lớp công khai vector {public static vector func() {return null; }} 'dẫn đến lỗi. – Assimilater

+0

Giao diện dường như không có giá trị luôn – Assimilater

+0

@Assimilater Tôi vừa thử mã của bạn. Nó biên soạn và chạy tốt cho tôi. 'vector' là một lớp, vì vậy' func() 'chắc chắn có thể trả về' null'. – Lucas

Các vấn đề liên quan