2011-12-20 5 views
10

Ho un metodo che restituisce null se il codice postale non è valido e restituisce semplicemente lo string se è valido. Trasforma anche i dati in determinati casi.Perché provare a utilizzare la stringa? (Stringa Nullable) in C# produce un errore di sintassi?

Ho il seguente test di unità di seguito, ma sto ricevendo errori di sintassi sulle linee in cui si sta utilizzando string?. Qualcuno potrebbe dirmi perché?

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

Oh cara. Brutta giornata in ufficio, dimenticare completamente le stringhe non devono essere annullabili. #facepalm – ediblecode

+8

No, non cancellare. Lasciateci tutti crogiolarvi nella vostra derisione. – Will

+1

Felice di averlo risolto :) –

risposta

14

La ? suffisso sul nome di un tipo è un alias per l'utilizzo di Nullable<T> (sezione 4.1.10 del C# 4 spec) . Il parametro tipo per Nullable<T> ha il struct constraint:

public struct Nullable<T> where T : struct 

Questo costringe T essere un tipo di valore non nullable. Ciò vieta di utilizzare string, poiché System.String è un tipo di riferimento.

Fortunatamente, come stringa è un tipo di riferimento, non è necessario utilizzare Nullable<T> - ha già un valore nullo (il riferimento null):

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

questa è una spiegazione molto migliore Jon – MethodMan

6

string è già un tipo di nullable non ha bisogno di un ?