2010-07-07 44 views
29

这是处理c#switch语句的合适方式,还是需要显式中断吗? referencec#switch语句返回适合替换中断

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]); 
    } 
+0

而不是把 “回归新的字符串(新的char [0]);”在switch语句之外,你也可以使用“default:return new string(new char [0]);”所有其他案件。这将是一个更清晰的方式来使用Switch语句。 – FrozZerrer 2017-10-25 17:59:04

回答

40

这很好。重点是,一个案例块的结束应该是无法访问 - 它在这里,因为你已经返回。

为什么你要返回new string(new char[0])而不是只是“”或string.Empty虽然?如果你试图确保每次都是不同的字符串,你实际上会遇到一个非常奇怪的角落案例 - 尽管调用new string(...)代码将始终实际返回相同的参考...

最后:我会其实建议改变这个开关/ 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 : ""; 
} 
+0

我知道有比这更简单的东西,谢谢 – Woot4Moo 2010-07-07 15:21:39