Действительно ли это - соответствующий способ обработать c# операторы переключения, или явное повреждение требуется все еще? ссылка
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]);
}
Это нормально. Дело в том, что конец блока кейсов должен быть недостижимым - что и есть здесь, потому что вы вернулись.
Почему вы возвращаете new string(new char[0])
, а не просто "" или string. Пусто
хотя? Если вы пытаетесь убедиться, что это другая строка каждый раз, вы на самом деле столкнетесь с очень странным угловым случаем - несмотря на вызов new string(...)
этот код всегда будет фактически возвращать одну и ту же ссылку...
Наконец: я бы предложил изменить этот блок переключателей/регистров на Dictionary
:
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 : "";
}
Вам не нужно специально использовать оператор break
, только тот, который изменяет поток управления, поэтому goto
или return
должны работать.
Дополнительную информацию см. в MSDN: http://msdn.microsoft.com/en-us/library/06tc147t(VS.71).aspx