我有一個具有enum屬性和布爾屬性的類,它基於它調用具體參數的特定方法。我在開關的每種情況下使用enum的switch語句和if作爲布爾值。這是一個很長的名單,並不覺得我是最優雅的解決方案。任何人都有更優雅或更簡單的方式來實現這一點?C#枚舉和布爾 - 尋找更優雅的方式
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");
}
}
有很多情況下,簡單的枚舉正是你所需要的。當你開始注意代碼中enum上的許多switch語句的代碼味道時,你開始需要用類替換它們。 – 2009-01-22 11:08:45
是的,你完全正確 - 用六個類取代枚舉就是爲了消除這個switch語句會過度。 – gkrogers 2009-01-22 11:47:32