2011-12-20 10 views
10

Mam metodę, która zwraca null, jeśli kod pocztowy jest nieprawidłowy, i po prostu zwraca string, jeśli jest prawidłowy. W niektórych przypadkach przekształca również dane.Dlaczego próbuje używać ciągu? (Nullable ciąg) w języku C# generuje błąd składni?

Mam następujący test jednostki poniżej, ale dostaję błędy składniowe na liniach, gdzie używają string?. Czy ktoś mógłby mi powiedzieć, dlaczego?

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

ojej. Zły dzień w biurze, całkowicie zapomnieć o strunach, nie musi być zerowy. #facepalm – ediblecode

+8

Nie, nie usuwaj. Pozwól nam wszystkim rozkoszować się Twoją podłością. – Will

+1

Cieszę się, że masz to uporządkowane :) –

Odpowiedz

14

The ? sufiks nazwy typ jest alias pomocą Nullable<T> (rozdział 4.1.10 z C# 4) specyfikacji . Parametr typ dla Nullable<T> ma struct constraint:

public struct Nullable<T> where T : struct 

To ogranicza T być typ wartości nie pustych. To zabrania używania string, ponieważ System.String jest typem odniesienia.

szczęście jak ciąg jest typem odniesienia, nie trzeba używać Nullable<T> - to już ma wartość zerową (null odniesienia):

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

to jest znacznie lepsze wyjaśnienie Jon – MethodMan

6

string jest już pustych rodzaju konstrukcji nie potrzeba ?