Я провел небольшое исследование, но не нашел ответа на этот вопрос. Есть ли a для представления нулевого случая в выражениях переключателя С # 8 таким образом, чтобы компилятор распознавал и не запускал предупреждение для ссылки x
в базовом случае при вызове ToString()
? Похоже, что это очевидный случай, и в этом случае мне не нужно использовать нулевой прощающий оператор !
.
public override int? ConvertToInt(object? value) => value switch
{
var x when x == null => null,
int x => x,
var x => int.Parse(x!.ToString())
};
У меня такое чувство, что они еще не дошли до этого, но я решил, что брошу вопрос.
Редактировать:
Я действительно придумал способ избавиться от необходимости в пустом операторе прощения, но мне все еще любопытно, есть ли определенный синтаксис нулевого регистра, который распознается. Это не кажется лучшим способом, поскольку он не совсем ясен, и я даже не уверен, будет ли это соблюдено, поскольку я не думаю, что ссылки, допускающие значение NULL, действительно влияют на что-либо во время выполнения, я протестирую это в ближайшее время.
public override int? ConvertToInt(object? value) => value switch
{
int x => x,
// notice the non-nullable object
object x => int.Parse(x.ToString()),
_ => null
};
Изменить 2:
Похоже, я ошибся, это действительно большая честь. При выполнении следующего теста утверждение не ошиблось.
[TestMethod]
public void MyTestMethod()
{
object? could_be_null = null;
string? str = could_be_null switch
{
object x => x.ToString(),
_ => null
};
Assert.IsNull(str);
}