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
语句来更改控制流,因此 goto
或 return
应该可以工作。
有关详细信息,请参阅 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的主要内容,如果未能解决你的问题,请参考以下文章