Сообщение Re[2]: Паттерн "или" от 22.04.2023 0:09
Изменено 22.04.2023 0:26 VladD2
Re[2]: Паттерн "или"
Здравствуйте, Ромашка, Вы писали:
Р>Влад, не тупи...
Р>if (foo() is B || foo() is C)
Р>{
Р> A x = foo();
Р> // код использующий x
Р>}
К сожалению, в реальной жизни всё несколько сложнее. Пришлось на шарпе вот такое накатать:
Р>Влад, не тупи...
Р>if (foo() is B || foo() is C)
Р>{
Р> A x = foo();
Р> // код использующий x
Р>}
К сожалению, в реальной жизни всё несколько сложнее. Пришлось на шарпе вот такое накатать:
private static ClickInfo? CreateListItemClickInfoOrDefault(DependencyObject targetControl, DependencyObject[] controls)
{
if (targetControl is not ListBoxItem and not MenuItem)
return null;
if (tryGetViewModels(out var viewModel, out var itemViewModel))
{
...
}
return null;
bool tryGetViewModels([MaybeNullWhen(false)] out object vm, [MaybeNullWhen(false)] out object itemVm)
{
if (controls.OfType<ISupportListItemClickInfo>().FirstOrDefault() is FrameworkElement { DataContext: { } vm1 }
&& targetControl is FrameworkElement { DataContext: { } itemViewModel1 })
{
vm = vm1;
itemVm = itemViewModel1;
return true;
}
if (controls.OfType<Selector>().FirstOrDefault() is FrameworkElement { DataContext: { } vm2 }
&& targetControl is FrameworkElement { DataContext: { } itemVm2 })
{
vm = vm2;
itemVm = itemVm2;
return true;
}
itemVm = null;
vm = null;
return false;
}Re[2]: Паттерн "или"
Здравствуйте, Ромашка, Вы писали:
Р>Влад, не тупи...
Р>if (foo() is B || foo() is C)
Р>{
Р> A x = foo();
Р> // код использующий x
Р>}
К сожалению, в реальной жизни всё несколько сложнее. Пришлось на шарпе вот такое накатать:
Р>Влад, не тупи...
Р>if (foo() is B || foo() is C)
Р>{
Р> A x = foo();
Р> // код использующий x
Р>}
К сожалению, в реальной жизни всё несколько сложнее. Пришлось на шарпе вот такое накатать:
private static ClickInfo? CreateListItemClickInfoOrDefault(DependencyObject targetControl, DependencyObject[] controls)
{
if (targetControl is not ListBoxItem and not MenuItem)
return null;
if (tryGetViewModels(out var viewModel, out var itemViewModel))
{
...
}
return null;
bool tryGetViewModels([MaybeNullWhen(false)] out object vm, [MaybeNullWhen(false)] out object itemVm)
{
if (controls.OfType<ISupportListItemClickInfo>().FirstOrDefault() is FrameworkElement { DataContext: { } vm1 }
&& targetControl is FrameworkElement { DataContext: { } itemViewModel1 })
{
vm = vm1;
itemVm = itemViewModel1;
return true;
}
if (controls.OfType<Selector>().FirstOrDefault() is FrameworkElement { DataContext: { } vm2 }
&& targetControl is FrameworkElement { DataContext: { } itemVm2 })
{
vm = vm2;
itemVm = itemVm2;
return true;
}
itemVm = null;
vm = null;
return false;
}