c#switch语句是return适合替换break

Posted

技术标签:

【中文标题】c#switch语句是return适合替换break【英文标题】:c# switch statement is return suitable to replace 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 语句的一种更简洁的方式。 【参考方案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 : "";

【讨论】:

以上是关于c#switch语句是return适合替换break的主要内容,如果未能解决你的问题,请参考以下文章

两种风格的C#switch-return语句,有什么区别? [关闭]

switch case和return的用法

用if-else语句替换程序中switch语句

c语言中switch怎么用?

c语言中switch怎么用?

switch是啥意思