使用 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
}
太棒了,我可以直接从我的应用程序调用它们并处理数据,但是,
我最近遇到了 Delegates
和 Func<T,TResult>
我想做的事情:
我想要一个简单的方法,它接受一个参数 LogInType
的枚举,如下所示:
public enum LogInType
{
UserNameAndPassword,
Facebook,
GooglePlus,
}
并根据提供给该方法的登录类型,自行处理登录过程,仅 returns SignInResponse
对象。
有没有一种方法可以使用委托来完成。而不是有 3 个单独的方法来调用每个案例。如果是,那么有人可以帮助将参数与 LogInType 一起传递给 Single 方法。我知道它必须是 Func
但 Func
会是什么样子,因为它必须采用 3 个不同的参数。
来自评论:
无论如何,这些方法中的每一个都是不同的签名,所以你有一个 Func<IFacebookInitializer
、Task<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,只是为了说明。
我正在研究 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,
}
并根据提供给该方法的登录类型,自行处理登录过程,仅 returns SignInResponse
对象。
有没有一种方法可以使用委托来完成。而不是有 3 个单独的方法来调用每个案例。如果是,那么有人可以帮助将参数与 LogInType 一起传递给 Single 方法。我知道它必须是 Func
但 Func
会是什么样子,因为它必须采用 3 个不同的参数。
来自评论:
无论如何,这些方法中的每一个都是不同的签名,所以你有一个 Func<IFacebookInitializer
、Task<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,只是为了说明。