c#switch语句返回适合替换break

时间:2010-07-07 15:17:58

标签: c# case switch-statement

这是处理c#switch语句的合适方法还是需要显式中断? reference

  public static string ToRegistryString(AliceKey.AliceKeyPaths aliceKeyPath)
    {
     switch (aliceKeyPath)
        {
            case AliceKey.AliceKeyPaths.NET_CLR_DATA:
                return @"\.NET CLR Data\";
            case AliceKey.AliceKeyPaths.NET_CLR_NETWORKING:
                return @"\.NET CLR Networking\";
            case AliceKey.AliceKeyPaths.NET_DATA_PROVIDER_MSSQL:
                return @"\.NET Data Provider for SqlServer\";
            case AliceKey.AliceKeyPaths.NET_DATA_PROVIDER_ORACLE:
                return @"\.NET Data Provider for Oracle\";
         }
       return new string(new char[0]);
     }

2 个答案:

答案 0 :(得分:40)

没关系。关键是案件块的结尾应该是无法访问的 - 它就在这里,因为你已经返回了。

为什么要返回new string(new char[0])而不仅仅是“”或string.Empty?如果你每次都试图确保它是一个不同的字符串,你实际上会碰到一个非常奇怪的角落 - 尽管调用new string(...)代码总是会返回相同的引用...

最后:我实际建议将此开关/案例块更改为Dictionary<AliceKey.AliceKeyPaths, string>

private static readonly Dictionary<AliceKey.AliceKeyPaths, string> RegistryMap =
    new Dictionary<AliceKey.AliceKeyPaths, string>
{
    { AliceKey.AliceKeyPaths.NET_CLR_DATA, @"\.NET CLR Data\" },
    { AliceKey.AliceKeyPaths.NET_CLR_NETWORKING, @"\.NET CLR Networking\" },
    // etc
};

public static string ToRegistryString(AliceKey.AliceKeyPaths aliceKeyPath)
{
    string value;
    return RegistryMap.TryGetValue(aliceKeyPath, out value) ? value : "";
}

答案 1 :(得分:5)

您不需要专门使用break语句来改变控制流,因此gotoreturn应该有效。

有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/06tc147t(VS.71).aspx