これはc#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]);
}
それはいいです。重要なのは、ケースブロックの終わりに到達できないようにする必要があるということです。これは、戻ってきたため、ここにあります。
「」や_string.Empty
_だけでなく、new string(new char[0])
を返すのはなぜですか?毎回異なる文字列であることを確認しようとすると、実際には非常に奇妙なコーナーケースに遭遇します-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 : "";
}
_
制御の流れを変更するだけのbreak
ステートメントを特に使用する必要はないので、goto
またはreturn
が機能するはずです。
詳細については、MSDNを参照してください。 http://msdn.Microsoft.com/en-us/library/06tc147t(VS.71).aspx