2011-12-20 68 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已经是空类型的不需要的类型的名称的?