Я провел некоторое исследование, но не нашел ответа на это. Можно ли представить нулевой регистр в выражениях переключателя c# 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())
};
У меня такое ощущение, что они просто еще не дошли до этого , но я решил, что брошу вопрос там.
Редактировать:
Я нашел способ устранить необходимость в операторе прощения, но мне все еще любопытно что касается, если есть определенный c синтаксис нулевого регистра, который распознается. Это не лучший способ, так как он не совсем понятен, и я даже не уверен, будет ли это выполнено, поскольку я не думаю, что ссылки Nullable действительно влияют на что-либо во время выполнения, я скоро опробую это.
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);
}