可以将两个重载方法变成一个方法
it is possible to made two overload method into single method
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
否则没有必要组合这两种方法,因为有一个额外的 Generic type parameter在第二个变体中,无论如何都需要填写该参数。无论如何,您都必须创建一个重载(以删除它)。
在我看来,保留你所拥有的。
是的,您可以将它们粉碎成一个方法,但是使用您拥有的泛型类型参数,您将需要传入一个幻像的泛型类型参数,IMO,这令人困惑且有异味。
此外,action
、action1
不是最佳命名。
是的,你可以。
将可选参数放在方法定义的末尾。根据我的观察,您的第二种方法因参数而异 - 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);
}
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
否则没有必要组合这两种方法,因为有一个额外的 Generic type parameter在第二个变体中,无论如何都需要填写该参数。无论如何,您都必须创建一个重载(以删除它)。
在我看来,保留你所拥有的。
是的,您可以将它们粉碎成一个方法,但是使用您拥有的泛型类型参数,您将需要传入一个幻像的泛型类型参数,IMO,这令人困惑且有异味。
此外,action
、action1
不是最佳命名。
是的,你可以。
将可选参数放在方法定义的末尾。根据我的观察,您的第二种方法因参数而异 - 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);
}