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 . Предыдущая версия .
Re: Pattern matching: связывание вложенных свойств с переменными
От: Jack128  
Дата: 31.08.22 15:10
Оценка: 147 (5) +1
Здравствуйте, VladD2, Вы писали:

if (AsRoutedCommand(targetControl) is { Name: not null and not "" and var name } routedCommand)
   return new CommandInfo(command, name, commandContainerDataContext);
Re[2]: Pattern matching: связывание вложенных свойств с переменными
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.08.22 15:21
Оценка: :)
Здравствуйте, Jack128, Вы писали:

J>
J>if (AsRoutedCommand(targetControl) is { Name: not null and not "" and var name } routedCommand)
J>   return new CommandInfo(command, name, commandContainerDataContext);
J>


Вот прямо так не канает:


Но вот так проканало:
if (AsRoutedCommand(targetControl) is { Name: not "" and var name } routedCommand)
    return new CommandInfo(command, routedCommand.Name, commandContainerDataContext);


Спасибо!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Pattern matching: связывание вложенных свойств с переменными
От: Ночной Смотрящий Россия  
Дата: 01.09.22 18:26
Оценка: +1
Здравствуйте, VladD2, Вы писали:

J>>if (AsRoutedCommand(targetControl) is { Name: not null and not "" and var name } routedCommand)


VD>Но вот так проканало:

VD>if (AsRoutedCommand(targetControl) is { Name: not "" and var name } routedCommand)

... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.