以下の if ステートメントはtrue
、レジストリ キーが見つからない場合に解決されません。ここで何が欠けていますか?
if ((Convert.ToString(Registry.GetValue(key, "EnableLinkedConnections", "")) == "0") ||
(Convert.ToString(Registry.GetValue(key, "EnableLinkedConnections", "")) == null))
以下の if ステートメントはtrue
、レジストリ キーが見つからない場合に解決されません。ここで何が欠けていますか?
if ((Convert.ToString(Registry.GetValue(key, "EnableLinkedConnections", "")) == "0") ||
(Convert.ToString(Registry.GetValue(key, "EnableLinkedConnections", "")) == null))
MSDN Docsによると、渡す 3 番目のパラメーターは、キーが見つからない場合に返される値です。
"" (String.Empty) を指定しているため、null または "0" ではなく、チェックする必要がある値です。
オブジェクトが "" を返すため、null の Convert.ToString 。試してみてくださいstring.IsNullOrEmpty()
。
Registry.GetValue は null オブジェクトを返しているため、Convert.ToString()はチェックしていない空の文字列 (こちらを参照) に変換します。代わりにこれを試してください:
object value = Registry.GetValue(key, "EnableLinkedConnections", "");
if (value != null)
{
string text = Convert.ToString(value);
}
経験則として、Convert.ToString の前にそれが null であるかどうかを確認し、同じメソッドを 2 回呼び出す前にオブジェクトに格納してください。これによりパフォーマンスが向上します。
object regystryValue = Registry.GetValue(key, "EnableLinkedConnections", "");
if(regystryValue != null && regystryValue.ToString() =="0"){
//do things
}