gpt4 book ai didi

c# - 构建允许将函数作为参数传入的通用 c# 函数

转载 作者:行者123 更新时间:2023-11-30 15:20:36 24 4
gpt4 key购买 nike

我有一段非常丑陋的代码,散布在整个项目中。这段代码的唯一区别是调用不同方法的一行。调用的方法总是返回 bool .

根据我的理解,我想重构它并将其提取到它自己的方法中并将 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;
}
}
}
}

来自 repo

public async Task<bool> IsCustomerComplete(int id)
{
...removed other code here
return true;
}

这有意义吗,我在正确的轨道上吗,从我发现的示例中它们只显示 Funcs<>传入 stringint这让事情看起来简单多了。

最佳答案

如果我了解您的目标,那么您就非常接近了。您缺少的最大的事情是将您的方法转换为 Func<>代表。在您的问题中,您包含了参数括号。如果您不调用该方法,则不需要这些。

所以,基本上,这就是您可能想要的。

 var process =  await RepeatableMasterPiece(1, 2, _myRepo.IsCustomerComplete);

关于c# - 构建允许将函数作为参数传入的通用 c# 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39781564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com