【问题标题】:c# switch statement is return suitable to replace breakc#switch语句是return适合替换break
【发布时间】:2011-03-12 21:20:39
【问题描述】:

这是处理 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]);
     }

【问题讨论】:

  • 而不是把“return new string(new char[0]);”在 switch 语句之外,您还可以使用“默认值:返回新字符串(新字符 [0]);”在所有其他案件之后。这将是使用 Switch 语句的一种更简洁的方式。

标签: c# case switch-statement


【解决方案1】:

您不需要专门使用 break 语句来更改控制流,因此 gotoreturn 应该可以工作。

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

【讨论】:

    【解决方案2】:

    没关系。关键是 case 块的结尾应该是不可到达的——它就在这里,因为你已经返回了。

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

    最后:我实际上建议将此 switch/case 块更改为 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 : "";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2016-12-05
      • 2013-08-20
      • 2012-06-21
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      相关资源
      最近更新 更多