这可以写得更好吗?根据以前的结果调用函数

jaz*_*000 2 c#

我有以下用c#编写的代码来检查各种测试,如果有任何失败,结果为false,不希望执行其他检查.

我编码的方式似乎"丑陋",我想知道是否有一个更优雅的解决方案,因为今天早上大脑褪色而我失踪了.

//check the rules
bool isValid = CheckPhoneFormat();
if (isValid)
{
    isValid = CheckDoNotCall();
}

if (isValid)
{
    isValid = CheckStatusActive();
}

if (isValid)
{
    isValid = CheckOCV();
}

if (isValid)
{
    isValid = CheckCard();
}

customer.IsValid = isValid;
Run Code Online (Sandbox Code Playgroud)

aba*_*hev 9

这增加了创建状态机的开销:

static Enumerable<Func<bool>() GetRules()
{

    yield return CheckPhoneFormat();
    yield return CheckDoNotCall();
    yield return CheckStatusActive();
    yield return CheckOCV();
    yield return CheckCard();
}

bool oneValid = GetRules().Any(b => b);
bool allValid = GetRules().All(b => b);
Run Code Online (Sandbox Code Playgroud)

如果你愿意,效率更高:

static IEnumerable<Func<bool>> arr = new Func<bool>[]
{
    () => CheckPhoneFormat(),
    () => CheckDoNotCall(),
    () => CheckStatusActive(),
    () => CheckOCV(),
    () => CheckCard();
};

bool oneValid = arr.Any(b => b);
bool allValid = arr.All(b => b);
Run Code Online (Sandbox Code Playgroud)


Dmi*_*try 5

是:

bool isValid = CheckPhoneFormat() && CheckDoNotCall()
               && CheckStatusActive() && CheckOCV() && CheckCard();
customer.IsValid = isValid;
Run Code Online (Sandbox Code Playgroud)

&&操作仅评估,如果第一个是第二个操作数true.

编辑
由于您调用的所有方法都是无参数的,因此请考虑将它们转换为只用属性(并重命名).它可能有助于调试.

bool isValid = IsValidPhoneFormat && IsValidDoNotCall
               && IsValidStatusActive && IsValidOCV && IsValidCard;
customer.IsValid = isValid;
Run Code Online (Sandbox Code Playgroud)