一般建议使用TryParse中的哪些控制流,如果一个在另一个之上?

时间:2016-02-23 14:46:53

标签: c# enums switch-statement

我有一个字符串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);

除了视觉差异之外,使用一个与另一个相比是否有任何优势/劣势?对哪种方法更好有共识吗?

1 个答案:

答案 0 :(得分:2)

if (!Enum.TryParse(typeString, true, out replicatingInstrumentType))
{
    Log.Error("Unknown Replicating instrument type: " + typeString);
    return new EmptyInstrument(instrumentIdentifier, Currency.EUR);
}

名为Inverted IFReplace Nested Conditional with Guard Clauses。它只是为了更容易阅读,因为它减少了嵌套和缩进的数量。压痕越小,水平视图区域越大。