我有一个具有枚举属性和布尔属性的类,基于它调用具有特定参数的特定方法.我对enum使用switch语句,在switch的每种情况下使用if作为布尔值.这是一个很长的清单,并不觉得我是最优雅的解决方案.任何人都有更优雅或更简单的方式来实现这个?
switch (ReadDecision)
{
case ReadDecisions.ReadNext:
{
if (UseTimeout)
{
Message = queue.Receive(Timeout);
}
else
{
Message = queue.Receive();
}
break;
}
case ReadDecisions.PeekNext:
{
if (UseTimeout)
{
Message = queue.Peek(Timeout);
}
else
{
Message = queue.Peek();
}
break;
}
case ReadDecisions.ReadMessageId:
{
if (UseTimeout)
{
Message = queue.ReceiveById(Id, Timeout);
}
else
{
Message = queue.ReceiveById(Id);
}
break;
}
case ReadDecisions.PeekMessageId:
{
if (UseTimeout)
{
Message = queue.PeekById(Id, Timeout);
}
else
{
Message = queue.PeekById(Id);
}
break;
}
case ReadDecisions.ReadCorrelationId:
{
if (UseTimeout)
{
Message = queue.ReceiveByCorrelationId(Id, Timeout);
}
else
{
Message = queue.ReceiveByCorrelationId(Id);
}
break;
}
case ReadDecisions.PeekCorrelationId:
{
if (UseTimeout)
{
Message = queue.PeekByCorrelationId(Id, Timeout);
}
else
{
Message = queue.PeekByCorrelationId(Id);
}
break;
}
default:
{
throw new Exception("Unknown ReadDecisions provided");
}
}
Run Code Online (Sandbox Code Playgroud)
根据什么queue
是,你可以改变的签名Peek()
,并Peek(bool)
到Peek(bool?)
?(其他方法也应该遵循.)
那样,而不是:
if (UseTimeout)
{
Message = queue.Peek(Timeout);
}
else
{
Message = queue.Peek();
}
Run Code Online (Sandbox Code Playgroud)
你可以有:
Message = queue.Peek(UseTimeout ? Timeout : null);
Run Code Online (Sandbox Code Playgroud)
另一个想法是你可以将决策结构推送到队列类:
if(UseTimeout)
Message = queue.PerformAction(ReadDecision, Timeout)
else
Message = queue.PerformAction(ReadDecision)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1899 次 |
最近记录: |