Выражения переключателя C # нулевой регистр

Я провел небольшое исследование, но не нашел ответа на этот вопрос. Есть ли 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);
}

person Jesse    schedule 14.01.2020    source источник


Ответы (1)


После небольшого экспериментирования, как показано в редакциях исходного вопроса, я пришел к этому решению. К моему удивлению, допустимость значения NULL для типизированной ссылки проверяется во время выполнения. Это лучшее, что я мог придумать, если кто-то может придумать что-то получше или есть официальный синтаксис для нулевого случая, о котором я не знаю, я с радостью приму ваш ответ вместо своего.

public override int? ConvertToInt(object? value) => value switch
{    
    int x => x,
    // notice the non-nullable object
    object x => int.Parse(x.ToString()),
    _ => null
};
person Jesse    schedule 14.01.2020