можно сделать два метода перегрузки в один метод - PullRequest
2 голосов
/ 17 апреля 2019
  public void Navigate<TContentPage, TNavigationParameter>(INavigation 
  navigation,
        TNavigationParameter navParam,
        Action<TContentPage, TNavigationParameter> action = null) where TContentPage : ContentPage
    {
        var contentPage = App.Container.Resolve<TContentPage>();
        action?.Invoke(contentPage, navParam);
        navigation.PushAsync(contentPage, true);
    }

    public void Navigate<TContentPage, TNavigationParameter,TSelected>(INavigation navigation,
        TNavigationParameter navParam,TSelected nav,
        Action<TContentPage, TNavigationParameter> action = null,Action<TContentPage,TSelected>action1=null
        ) where TContentPage : ContentPage
    {
        var contentPage = App.Container.Resolve<TContentPage>();
        action?.Invoke(contentPage, navParam);
        action1?.Invoke(contentPage,nav);

        navigation.PushAsync(contentPage, true);
    }

это два метода перегрузки, которые я использовал для навигации. Могу ли я использовать один из них и могу ли я изменить этот метод, не имея двух действий? Могу ли я изменить второй метод для использования в обоих случаях

Ответы [ 2 ]

4 голосов
/ 17 апреля 2019

Если вы не хотите использовать конкретные типы или интерфейс для TNavigationParameter или, по крайней мере, TSelected, то нет необходимости комбинировать эти 2 метода, поскольку в дополнительном параметре Generic type Второй вариант и этот параметр необходимо будет заполнить в любом случае.Вам бы пришлось создать перегрузку (чтобы удалить ее), которая у вас есть в любом случае.

IMO сохранить то, что у вас есть

Да, вы можете разбить их в один метод, но с параметрами общего типау вас есть, вам нужно будет передать параметр фантомного универсального типа, который IMO, его запутанность и запах


Кроме того, action, action1 менее чем оптимальныйименование

1 голос
/ 17 апреля 2019

Да, вы можете.

Поместите необязательные параметры в конец определения метода.Согласно моим наблюдениям, ваш второй метод зависит от таких параметров, как TSelected nav и Action<TContentPage,TSelected>action1=null

Я думаю, это будет работать нормально:

public void Navigate<TContentPage, TNavigationParameter,TSelected>(
    INavigation navigation,
    TNavigationParameter navParam,
    Action<TContentPage, TNavigationParameter> action = null,
    Action<TContentPage,TSelected> action1 = null,
    TSelected nav = default(TSelected)
    ) where TContentPage : ContentPage
{
    var contentPage = App.Container.Resolve<TContentPage>();
    action?.Invoke(contentPage, navParam);
    action1?.Invoke(contentPage, nav); 
    navigation.PushAsync(contentPage, true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...