Есть ли способ, которым я могу устранить необходимость в «как . В методе события с измененным свойством?

#c#

#c#

Вопрос:

У меня есть этот код:

     private static void IsAvailablePropertyChanged(BindableObject bindable, object oldValue, object newValue)
    {
        if((bindable as ArrowGridTemplate).FR != null)
        {
            if ((bool)newValue)
            {
                (bindable as ArrowGridTemplate).Opacity = 1;
                (bindable as ArrowGridTemplate).IsEnabled = true;
                
            }
            else
            {
                (bindable as ArrowGridTemplate).Opacity = 0.5;
                (bindable as ArrowGridTemplate).IsEnabled = false;

            }
        }
    }
 

Есть ли какой-то способ, которым я мог бы изменить это, чтобы почти каждая строка не требовала:

 (bindable as ArrowGridTemplate)
 

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

1. if (bindable is ArrowGridTemplate temp amp;amp; temp.FR != null) ... temp.Opacity = 1; ...

Ответ №1:

Здесь можно использовать is шаблон типа:

 if(bindable is ArrowGridTemplate template amp;amp; template.FR != null)
{
    if ((bool)newValue)
    {
        template.Opacity = 1;
        template.IsEnabled = true;
            
    }
    else
    {
        template.Opacity = 0.5;
        template.IsEnabled = false'
    }
}
 

ArrowGridTemplate template здесь что-то вроде «объявления переменной», так что вы можете изменить template его на любое имя, которое захотите.

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

1. итак, «if (bindable is ArrowGridTemplate template» также проверит его и убедится, что это ArrowGridTemplate? Как насчет того, если оно равно null, должен ли я также проверить, не является ли значение привязки null ?

2. Это гарантирует, что это ArrowGridTemplate . Прочитайте предоставленную мной ссылку для получения дополнительной информации. Я не думаю bindable , что может быть null, поэтому вам не нужно это проверять. Вам нужно было бы проверить наличие нулей, если бы вы использовали as , потому что преобразование завершилось бы неудачей. @RichardS