Pattern matching: связывание вложенных свойств с переменными
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.08.22 15:04
Оценка:
Всем привет!

В Шарпе появился Pattern matching (не прошло и 20 лет). Стало возможно писать вот такие паттерны:
if (AsRoutedCommand(targetControl) is { Name: not null and not "" } routedCommand)
    return new CommandInfo(command, routedCommand.Name, commandContainerDataContext);


Но хочется связать со свойством Name переменную, чтобы проверить значение через !string.IsNullOrEmpty(name) и передать значение в CommandInfo (выделено жирным).

В Nenerle можно связать любую часть паттерна с переменной по средствам оператора as. На гипотетической смеси Nenerle и C#-а это выглядело бы так:
if (AsRoutedCommand(targetControl) is { Name: not null and not "" as name })
    return new CommandInfo(command, name, commandContainerDataContext);

или так:
if (AsRoutedCommand(targetControl) is { Name: _ as name } && !string.IsNullOrEmpty(name))
    return new CommandInfo(command, name, commandContainerDataContext);

Но в текущей реализации C# я что-то не нашёл как это сделать. Я просто что-то пропустил, или возможности связывать переменные с вложенными свойствами в C# нет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 31.08.2022 15:06 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.