Почему пытается использовать строку? (Обнуляемая строка) в C # выдает синтаксическую ошибку? - PullRequest
10 голосов
/ 20 декабря 2011

У меня есть метод, который возвращает null, если почтовый индекс недействителен, и просто возвращает string, если он действителен.Он также преобразует данные в определенных случаях.

У меня есть следующий модульный тест ниже, но я получаю синтаксические ошибки в строках, где он использует 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);
    }

Ответы [ 2 ]

14 голосов
/ 20 декабря 2011

Суффикс ? в имени типа является псевдонимом для использования Nullable<T> (раздел 4.1.10 спецификации C # 4). Параметр типа для Nullable<T> имеет ограничение struct :

public struct Nullable<T> where T : struct

Это ограничивает T типом значения, который не может иметь значение NULL. Это запрещает вам использовать string, так как System.String является ссылочным типом.

К счастью, как строка является ссылочным типом, вам не нужно использовать Nullable<T> - она ​​уже имеет нулевое значение (нулевая ссылка):

string x = null; // No problems here
6 голосов
/ 20 декабря 2011

string уже обнуляемый тип и не нуждается в ?

...