Всем привет!
Что-то не понимаю. МС не позволяет сделать или-паттерн в паттер-матчинге, или я не пойму как это синтаксически записать?
Есть ситуация:
class A {}
class B : A {}
class C : A {}
class D : A {}
...
A foo() => new C();
if (foo() is B x)
{
// код использующий x
}
Я хочу сделать еще один паттерн:
if (foo() is B x || foo() is C x)
{
// код использующий x
}
но компилятор Щарп орет, что переменную x нельзя дважды объявлять. Это что же в Шарп не завезли или-патерн?
Другими словами, аналога вот такого немерлового кода написать нельзя?
module Program
{
class A {}
class B : A {}
class C : A {}
class D : A {}
Main() : void
{
def foo() : A { C() }
match (foo())
{
| B as x
| C as x => WriteLine(x) // в x экземпляр C или B, но не D и не A, а переменная имеет тип A
| _ => WriteLine("other")
}
}
}