我正在开发PCL,它还有许多功能也提供了登录。我最近也开始使用代理。
我有一个简单的方法,它接受参数并使用用户名和密码提供GPlus,Facebook或简单登录。如下面的代码所示:
public async Task<SignInResponse> SignInUsingFacebook(IFacebookInitializer faceBookConfiguration)
{
//my code
}
public async Task<SignInResponse> SignInUserNameAndPass(string username,string password)
{
//my code
}
public async Task<SignInResponse> SignInUsingGPlus(IGPlusInitializer gPlusConfiguration)
{
//my code
}
这很棒,我可以直接从我的应用程序中调用它们并处理数据,但是,
我最近遇到了Delegates
和Func<T,TResult>
我想要一个简单的方法,它接受一个LogInType
的枚举参数,如下所示:
public enum LogInType
{
UserNameAndPassword,
Facebook,
GooglePlus,
}
并根据提供给方法的登录类型的类型,自己处理LogIn进程并返回SignInResponse
对象。
有没有办法可以使用Delegates来完成。而不是有3个单独的方法来调用每个案例。如果是,那么有人可以帮助将参数与LogInType一起传递给Single方法。我知道它必须是Func
,但是Func
会是什么样子,因为它必须采用3个不同的参数。
来自评论:
无论如何,这些方法都是不同的签名,因此你有一个Func<IFacebookInitializer
,Task<SignInResponse>>
,Func<string, string, Task<SignInResponse>>
和Func<IGPlusInitializer, Task<SignInResponse>>
,所以你仍然会得到一个if语句。
调用方法时可以返回Func吗?这种方式我可以根据快速开关情况返回三个功能中的任何一个。问题是(如果可能的话)返回这三种方法之一的方法的通用响应(或公共响应)类型
答案 0 :(得分:0)
通用Func的工作原理如下: 您在Func中定义的最后一个数据类型 - &#34;输出&#34;在这种情况下,应该是您要访问该特定函数的方法的返回类型,并且该方法也应该是静态的。 这可能会有所帮助:
Func<LogInType, string> Login = LoginMethod;
private static string LoginMethod(LogInType loginType)
{
if (loginType == LogInType.Facebook)
return "Facebook";
if (loginType == LogInType.GooglePlus)
return "GooglePlus";
if (loginType == LogInType.UserNameAndPassword)
return "UserNameAndPassword";
return "Default";
}
上例中的返回类型只是用于解释的字符串。