我有一个字符串typeString
,我试图用30个案例解析一个Enum,所有这些都有相当独特的返回语句。在一些书中,我看到过像这样的控制流程
if (!Enum.TryParse(typeString, true, out replicatingInstrumentType))
{
Log.Error("Unknown Replicating instrument type: " + typeString);
return new EmptyInstrument(instrumentIdentifier, Currency.EUR);
}
switch (replicatingInstrumentType)
{
case TypeA:
{
return TypeAReturnStatement;
}
// .....
// more cases here ....
// .....
case TypeZ:
{
return TypeZReturnStatement;
}
default:
{
return new EmptyInstrument(instrumentIdentifier, Currency.EUR);
}
}
虽然我总是认为应该做
if (Enum.TryParse(typeString, true, out replicatingInstrumentType))
{
switch (replicatingInstrumentType)
{
case TypeA:
{
return TypeAReturnStatement;
}
// .....
// more cases here ....
// .....
case TypeZ:
{
return TypeZReturnStatement;
}
default:
{
return new EmptyInstrument(instrumentIdentifier, Currency.EUR);
}
}
}
Log.Error("Unknown Replicating instrument type: " + typeString);
return new EmptyInstrument(instrumentIdentifier, Currency.EUR);
除了视觉差异之外,使用一个与另一个相比是否有任何优势/劣势?对哪种方法更好有共识吗?
答案 0 :(得分:2)
if (!Enum.TryParse(typeString, true, out replicatingInstrumentType))
{
Log.Error("Unknown Replicating instrument type: " + typeString);
return new EmptyInstrument(instrumentIdentifier, Currency.EUR);
}
名为Inverted IF
或Replace Nested Conditional with Guard Clauses。它只是为了更容易阅读,因为它减少了嵌套和缩进的数量。压痕越小,水平视图区域越大。