2011-12-20 18 views
10

Tôi có phương thức trả về null nếu mã bưu điện không hợp lệ và chỉ trả về string nếu nó hợp lệ. Nó cũng biến đổi dữ liệu trong một số trường hợp nhất định.Tại sao cố gắng sử dụng chuỗi? (Nullable chuỗi) trong C# sản xuất một lỗi cú pháp?

Tôi có bài kiểm tra đơn vị sau đây nhưng tôi gặp phải lỗi cú pháp trên các dòng đang sử dụng string?. Bất cứ ai có thể cho tôi biết lý do tại sao?

public void IsValidUkPostcodeTest_ValidPostcode() 
    { 
     MockSyntaxValidator target = new MockSyntaxValidator("", 0); 
     string fieldValue = "BB1 1BB"; 
     string fieldName = ""; 
     int lineNumber = 0; 
     string? expected = "BB1 1BB"; 
     string? actual; 

     actual = target.IsValidUkPostcode(fieldValue, fieldName, lineNumber); 

     Assert.AreEqual(expected, actual); 
    } 
+8

Ôi trời ơi. Ngày tồi tệ tại văn phòng, hoàn toàn quên dây không phải là vô giá trị. #facepalm – ediblecode

+8

Không, đừng xóa. Hãy để chúng tôi tất cả các bask trong tình trạng của bạn. – Will

+1

Vui vì bạn đã sắp xếp xong :) –

Trả lời

14

Các ? hậu tố vào tên của một loại là một bí danh cho sử dụng Nullable<T> (phần 4.1.10 của C# 4 spec) . Tham số kiểu cho Nullable<T>struct constraint:

public struct Nullable<T> where T : struct 

này làm hạn chế T là một loại giá trị không nullable. Điều đó cấm bạn sử dụng string, vì System.String là loại tham chiếu.

May mắn thay, như chuỗi là một loại tài liệu tham khảo, bạn không cần phải sử dụng Nullable<T> - nó đã có một giá trị null (tham chiếu null):

string x = null; // No problems here 
+0

đây là giải thích tốt hơn nhiều Jon – MethodMan

6

string là đã loại một nullable không cần một ?

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