这是处理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]);
}
答案 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
语句来改变控制流,因此goto
或return
应该有效。
有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/06tc147t(VS.71).aspx