Мне нравится использовать pattern-matching
в nullable int
т. nullable int
int?
:
int t = 42;
object tobj = t;
if (tobj is int? i)
{
System.Console.WriteLine($"It is a nullable int of value {i}");
}
Однако это приводит к следующим синтаксическим ошибкам:
- CS1003: синтаксическая ошибка, ';' ,
- CS1525: недопустимый термин ")",
- CS0103: имя "i" не существует в текущем контексте.
"i)" помечено красной волнистой линией.
Выражение компилирует при использовании старого оператора is
:
int t = 42;
object tobj = t;
if (tobj is int?)
{
System.Console.WriteLine($"It is a nullable int");
}
string t = "fourty two";
object tobj = t;
if (tobj is string s)
{
System.Console.WriteLine([email protected]"It is a string of value ""{s}"".");
}
Также работает как положено.
(Я использую c#-7.2 и протестировал оба .net-4.7.1 и .net-4.6.1)
Я думал, что это связано с приоритетом оператора. Поэтому я пытался использовать скобки в нескольких местах, но это не помогло.
Почему он дает эти синтаксические ошибки и как их избежать?