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);
}
这是我用来导航的两个重载方法,我可以使用其中一个,是否可以在没有两个动作函数的情况下修改此方法,是否可以修改第二个方法以便在两种情况下都使用
答案 0 :(得分:3)
除非您要为TNavigationParameter
使用具体类型或接口,或者至少要为TSelected
使用接口,否则不需要将这两种方法结合使用,因为在其中有一个额外的Generic type parameter第二个变体,则无论如何都需要填写该参数。无论如何,您将不得不创建一个过载(将其删除)。
海事组织保留你的财产
是的,您可以将它们粉碎成一个方法,但是拥有通用类型参数后,您将需要传递一个幻像通用类型参数,该参数会引起IMO,其混淆和气味
此外,action
,action1
的命名也不尽人意
答案 1 :(得分:0)
是的。
将可选参数放在方法定义的末尾。根据我的观察,您的第二种方法因参数而异-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);
}