使用 Func<T,TResult> c#

Using Func<T,TResult> c#

我正在研究 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,
}

并根据提供给该方法的登录类型,自行处理登录过程,仅 returns SignInResponse 对象。


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


来自评论:

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

调用方法时可以return一个Func吗?通过这种方式,我可以 return 基于快速切换案例的三个函数中的任何一个。问题是(如果可能的话)return 这三种方法中的任何一种方法的一般响应(或常见响应)类型是什么

泛型 Func 的工作原理如下: 您在 Func 中定义的最后一个数据类型 - "output" 在这种情况下应该是您要转到该特定函数的方法的 return 类型,并且该方法也应该是静态的。 这可能有帮助:

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

上面例子中的return类型是string,只是为了说明。