使用Func <t,tresult> c#

时间:2017-04-26 09:34:57

标签: c# delegates func

我正在开发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
}

这很棒,我可以直接从我的应用程序中调用它们并处理数据,但是, 我最近遇到了DelegatesFunc<T,TResult>

我想做什么:

我想要一个简单的方法,它接受一个LogInType的枚举参数,如下所示:

public enum LogInType
{
    UserNameAndPassword,
    Facebook,
    GooglePlus,
}

并根据提供给方法的登录类型的类型,自己处理LogIn进程并返回SignInResponse对象。

有没有办法可以使用Delegates来完成。而不是有3个单独的方法来调用每个案例。如果是,那么有人可以帮助将参数与LogInType一起传递给Single方法。我知道它必须是Func,但是Func会是什么样子,因为它必须采用3个不同的参数。

来自评论:

无论如何,这些方法都是不同的签名,因此你有一个Func<IFacebookInitializerTask<SignInResponse>>Func<string, string, Task<SignInResponse>>Func<IGPlusInitializer, Task<SignInResponse>>,所以你仍然会得到一个if语句。

调用方法时可以返回Func吗?这种方式我可以根据快速开关情况返回三个功能中的任何一个。问题是(如果可能的话)返回这三种方法之一的方法的通用响应(或公共响应)类型

1 个答案:

答案 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";
}

上例中的返回类型只是用于解释的字符串。