Паттерн "или"
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.04.23 17:50
Оценка: -1
Всем привет!

Что-то не понимаю. МС не позволяет сделать или-паттерн в паттер-матчинге, или я не пойму как это синтаксически записать?

Есть ситуация:
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")
    }
  }
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 21.04.2023 17:52 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.