首页 / C# / 构建允许将函数作为参数传递的通用c#函数
构建允许将函数作为参数传递的通用c#函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了构建允许将函数作为参数传递的通用c#函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2088字,纯文字阅读大概需要3分钟。
内容图文
![构建允许将函数作为参数传递的通用c#函数](/upload/InfoBanner/zyjiaocheng/684/a467be30f46a4707a3c2ea0023878e1f.jpg)
我有一个非常丑陋的代码,分散在整个项目中.这段代码的唯一区别是一行调用了不同的方法.被调用的方法总是返回布尔值.
我想对其进行重构并将其提取到其自己的方法中,并且根据我的理解,可以将1个衬里传递给该方法(如果可能的话),我可以使用Func.去做这个.
这是我想要做的.我试图使事情尽可能清晰
public async Task<bool> SomeMethod()
{
//code removed for readability.
//IsCustomerComplete will return a bool
var process = await RepeatableMasterPiece(1, 2, _myRepo.IsCustomerComplete(someParameterRequired));
//do something with process result
return process;
}
private async Task<bool> RepeatableMasterPiece(int param1, int param2, Func<Task<bool>> method)
{
int retry = 0;
bool soapComplete = false;
string soapFault = "just a placeholder for example";
bool blackListStatus = false;
while (!soapComplete && retry <= 1)
{
try
{
if (soapFault != null)
{
//do some stuff with param1 & param2 here
}
if (!soapComplete)
{
return await method.Invoke();
}
}
catch (FaultException ex)
{
soapFault = ex.Message;
retry++;
if (retry > 1)
{
throw ex;
}
}
}
}
来自回购
public async Task<bool> IsCustomerComplete(int id)
{
...removed other code here
return true;
}
从我发现它们仅显示Funcs的示例来看,这是否有意义?传递一个字符串或整数,这使事情看起来非常简单.
解决方法:
这是根据您提供的详细信息的示例.
public async Task SomeMethod() {
//code in method.
var _myRepo = new repo();
var someParameterRequired = 1;
var process = await RepeatableMasterPiece(1, 2, () => _myRepo.IsCustomerComplete(someParameterRequired));
//do something with process result
}
private async Task<bool> RepeatableMasterPiece(int param1, int param2, Func<Task<bool>> method) {
int retry = 0;
bool soapComplete = false;
string soapFault = "just a placeholder for example";
bool blackListStatus = false;
while (!soapComplete && retry <= 1) {
try {
if (soapFault != null) {
//do some stuff with param1 & param2 here
}
if (!soapComplete && method != null) {
return await method();
}
} catch (FaultException ex) {
soapFault = ex.Message;
retry++;
if (retry > 1) {
throw ex;
}
}
}
return false;
}
这里的假设是所有目标方法都将返回Task< bool>.
如果目标函数不需要任何参数,则可以按照其他答案中的说明进行操作,只提供函数本身而不带括号.
内容总结
以上是互联网集市为您收集整理的构建允许将函数作为参数传递的通用c#函数全部内容,希望文章能够帮你解决构建允许将函数作为参数传递的通用c#函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。