2011-12-20 69 views
10

如果郵政編碼無效,我有一個方法返回null,如果有效,只返回string。它也在某些情況下轉換數據。爲什麼試圖使用字符串? (可空字符串)在C#中產生語法錯誤?

我有以下的單元測試,但我正在使用它的線string?的語法錯誤。有誰能告訴我爲什麼?

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

哦,親愛的。糟糕的一天在辦公室,完全忘記了字符串不必是可空的。 #facepalm – ediblecode 2011-12-20 15:28:20

+8

不,請勿刪除。讓我們都沉浸在你的狂歡中。 – Will 2011-12-20 15:29:40

+1

很高興你有這個整理:) – 2011-12-20 15:35:25

回答

14

?後綴使用Nullable<T>(部分C#4規範的4.1.10)的別名。對於Nullable<T>類型參數具有struct constraint

public struct Nullable<T> where T : struct 

這限制T是一個非空值類型。這禁止你使用string,因爲System.String是一個參考類型。

幸運的是,作爲字符串是引用類型,你並不需要使用Nullable<T> - 它已經有一個空值(空引用):

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

這是一個更好的解釋喬恩 – MethodMan 2011-12-20 15:34:49

6

string已經是空類型的不需要的類型的名稱的?