我有一个非常冗长的布尔变量,它看起来像:
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
由于这种情况需要经常检查,我一遍又一遍地写同样的事情。是否可以将其存储在变量中,以便我可以在需要时重复使用它?
答案 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
...