Сопоставление шаблона C# с управляемым значением свойства

#c# #pattern-matching

Вопрос:

Допустим, у меня есть класс

 public class Foo
{
  public int Bar { get; set; }
  
  public string Baz { get; set; }
}
 

И я инициализирую это в переменной.

 var foo = new Foo
{
  Bar = 123,
  Baz = "123"
};
 

Можно ли сопоставить этот шаблон с изменяемым значением?

Потому что я могу это сделать:

 if (test is { Bar: >= 100 })
{
  // do
}
 

Возможно ли этого достичь?

 if (test is { Bar: >= 100, Baz: value.Length > 5 })
{
  // do
}
 

Приведенный выше синтаксис недопустим.

Ответ №1:

Вложенный шаблон свойств {Length: > 5} должен сделать свое дело:

 if (foo is { Bar: >= 100, Baz: {Length: > 5}})
{
    // do
}
 

Комментарии:

1. , значит И или ИЛИ?

2. Да, это то, что я искал. Спасибо. Не знал, что мы можем гнездиться внутри

3. @вивекнуна AND

4. @viveknuna sharplab

5. @GuruStron спасибо, гуру