Здравствуйте, VladD2, Вы писали:
if (AsRoutedCommand(targetControl) is { Name: not null and not "" and var name } routedCommand)
return new CommandInfo(command, name, commandContainerDataContext);
Здравствуйте, 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);
Спасибо!
Здравствуйте, 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>>
Всем привет!
В Шарпе появился 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# нет?