在变量中存储复杂的布尔值

时间:2014-11-11 09:46:07

标签: c#

我有一个非常冗长的布尔变量,它看起来像:

c.Card != null && slot.Card.CardId == c.Card.CardId && slot.E1Number == c.E1Number && slot.Capacity == c.Capacity && slot.PacketLinkCapacity == c.PacketLinkCapacity && slot.TrafficType == c.TrafficType && slot.TxFrequency == c.RxFrequency && slot.RxFrequency == c.TxFrequency && slot.E1Number != null && slot.Capacity != null && slot.ProtectionMode == c.ProtectionMode

由于这种情况需要经常检查,我一遍又一遍地写同样的事情。是否可以将其存储在变量中,以便我可以在需要时重复使用它?

4 个答案:

答案 0 :(得分:2)

是的,你可以。只需创建一个执行此检查的方法,或者如果要传递该函数,请使用Func<bool>

Func<bool> f = new Func<bool>( () => YourLengthyMethod() );

答案 1 :(得分:0)

尝试这样的事情:

private static Expression<Func<Slot, bool>> Filter(filter)
{
    return cat => [...your code for filtering...];
}

答案 2 :(得分:0)

我建议你将它分开并将其写入另一种方法,当你想要进行所有这些检查时,你会调用它。 在项目中重复使用代码并不是一种好习惯。

例如,在您的情况下,您可以为此方法提供信息(c.Card,slot.Card.CardId等)并在那里进行正确的检查。

答案 3 :(得分:0)

智能(ish)使用C#功能:

class EvaluatedBoolean
{
    private readonly Func<bool> _evaluation = () => false;

    public EvaluatedBoolean(Func<bool> evaluation)
    {
        _evaluation = evaluation;
    }

    public static implicit operator bool(EvaluatedBoolean eb)
    {
        return eb._evaluation.Invoke();
    }
}

然后:

var eval = new EvaluatedBoolean(() => /*your conditions here*/);
...

PerformSomeWorkIfCondition(eval);

...
void PerformSomeWorkIfCondition(bool condition)
{
    if (condition)
    {
        //do something
...