可以将两种重载方法变成单一方法


  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);
    }

这是我用来导航的两个重载方法,我可以使用其中一个吗,我可以在没有两个动作功能的情况下修改此方法吗 我可以修改第二种方法以便在两种情况下使用

除非您想使用具体类型或接口进行TNavigationParameter,或者至少TSelected,否则没有必要组合这两种方法,因为在第二个变体中有一个额外的泛型类型参数,无论如何都需要填写该参数。无论如何,您都必须创建一个重载(以删除它(。

在我看来,保留你所拥有的。

是的,您可以将它们粉碎到一个方法中,但是使用您拥有的泛型类型参数,您将需要传入一个幻像泛型类型参数,IMO,它令人困惑和气味。

<小时 />

此外,actionaction1不是最佳命名。

是的,你可以。

将可选参数放在方法定义的末尾。根据我的观察,您的第二种方法因参数而异,例如 - TSelected navAction<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);
}

最新更新