Почему пытается использовать строку? (Nullable string) в С# выдает синтаксическую ошибку?
У меня есть метод, который возвращает null
, если почтовый индекс недействителен, и просто возвращает string
, если он действителен. Он также преобразует данные в определенных случаях.
У меня есть следующий unit test ниже, но я получаю синтаксические ошибки в строках, где он использует 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);
}
Ответы
Ответ 1
Суффикс ?
для имени типа является псевдонимом для использования Nullable<T>
(раздел 4.1.10 С# 4 спецификации). Параметр type для Nullable<T>
имеет ограничение struct
:
public struct Nullable<T> where T : struct
Это ограничивает T
недействительным типом значения. Это запрещает использование string
, поскольку System.String
является ссылочным типом.
К счастью, поскольку строка является ссылочным типом, вам не нужно использовать Nullable<T>
- она уже имеет нулевое значение (нулевая ссылка):
string x = null; // No problems here
Ответ 2
string
уже является нулевым типом, а не требуется ?