2011-12-20 10 views
10

Tengo un método que devuelve null si el código postal no es válido, y simplemente devuelve el string si es válido. También transforma los datos en ciertos casos.¿Por qué tratar de usar una cadena? (Cadena Nullable) en C# produce un error de sintaxis?

Tengo la siguiente prueba de unidad a continuación, pero obtengo errores de sintaxis en las líneas donde está usando string?. ¿Alguien podría decirme por qué?

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 querido. Un mal día en la oficina, olvide por completo las cadenas, no tiene que ser anulable. #facepalm – ediblecode

+8

No, no eliminar. Disfrutemos de su dermatología. – Will

+1

Me alegra que hayas solucionado :) –

Respuesta

14

El ? sufijo en el nombre de un tipo es un alias para el uso de Nullable<T> (sección 4.1.10 de la especificación C# 4) . El parámetro de tipo para Nullable<T> tiene la struct constraint:

public struct Nullable<T> where T : struct 

Esto limita T ser un tipo de valor no anulable. Eso le prohíbe usar string, ya que System.String es un tipo de referencia.

Afortunadamente, como cadena es un tipo de referencia, no es necesario utilizar Nullable<T> - que ya tiene un valor nulo (la referencia nula):

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

esta es una explicación mucho mejor Jon – MethodMan

6

string ya es un tipo un anulable no necesita un ?

Cuestiones relacionadas