gpt4 book ai didi

c# - 拆分功能的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:35 25 4
gpt4 key购买 nike

我有一个大对象,在对它做某事之前,我需要检查多个条件。我有一个很大的功能。它是不可读的,我想把它拆开来做更小的函数,让我的代码更清晰。

该函数正在检查条件,如果有问题,它会停止并返回问题(属于 enum 类型)。

它看起来像这样:

AnswerEnum CheckEverything(Bigobj o)
{
// some calculation
if (...)
return AnswerEnum.Error1;

// some more calculation
if (...)
return AnswerEnum.Error2;

...
return AnswerEnum.OK;
}

现在,我想在较小的函数中进行计算,我可以做以下事情:
AnswerEnum CheckEverything(Bigobj o)
{
AnswerEnum ret;
ret=CheckFirstThing(o);
if (ret!=AnswerEnum.OK)
return ret;

ret=CheckSecondThing(o);
if (ret!=AnswerEnum.OK)
return ret;

...
return AnswerEnum.OK;
}

该解决方案包含
if (ret!=AnswerEnum.OK)
return ret;

多次,我不喜欢它。
我想尽量减少 return 的数量语句和代码的任何重复部分。在这种情况下我该怎么做?

最佳答案

如果您的所有检查功能都具有相同的签名(您发布的代码中似乎就是这种情况),那么您所要做的就是创建一个委托(delegate)列表,如下所示:

List<Func<Bigobj, AnswerEnum>> list;

然后在类初始化期间添加所有检查方法:
list.Add(CheckFirstThing);
list.Add(CheckSecondThing);

最后,检查一切:
AnswerEnum ret;

foreach(Func<Bigobj, AnswerEnum> f in list)
{
ret = f(o);
if (ret != AnswerEnum.Ok) return ret;
}
return AnswerEnum.Ok;

关于c# - 拆分功能的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402397/

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