以下のコードのi ++の時点で、VisualStudioに「到達不能コードが検出されました」というメッセージが表示されます。私が間違ったことを見つけられますか?
try
{
RegistryKey OurKey = Registry.CurrentUser;
OurKey.CreateSubKey("Software\\Resources\\Shared");
OurKey = OurKey.OpenSubKey("Software\\Resources\\Shared", true);
for (int i = 0; i < cmbPaths.Items.Count; i++) //<---- problem with i
{
OurKey.SetValue("paths" + i, cmbPaths.Items[i]);
break;
}
}
問題は、これが実際にはループではないということです。休憩の条件がないので、同等に次のようなものを書くことができます
if(cmbPath.Items.Count > 0)
{
OurKey.SetValue("paths" + 0, cmbPaths.Items[0]);
}
または、次のような修正が必要です
for (int i = 0; i < cmbPaths.Items.Count; i++)
{
OurKey.SetValue("paths" + i, cmbPaths.Items[i]);
if(someConditionHolds)
break;
}
最初の反復が終了する前に、ループから抜け出します。
問題はあなたがbreak;
ループ内で、他に何もする可能性がない場合、iの増分(i++
)到達することはありません。
たとえば、Entity Frameworkを使用していて、そのプロジェクトへの参照を追加しなかった場合、到達不能コードが発生する可能性もあります。
データレイヤープロジェクト、ドメインクラスなどのプロジェクトがいくつかあるとします。次に、テスト用のコンソールアプリなどを作成し、dbcontextの場所を参照しますが、たとえばnugetを使用せずにEFを追加すると、次のようになります。ループなどを書き込もうとすると、コードに到達できなくなります。
あなたの問題は解決されましたが、私はあなたにこれを伝える必要があります、あなたはあなたの目的のためにCreateSubKey()メソッドを使うことができます。私はそれがより良い選択だと思います。 :)
//Creates a new subkey or opens an existing subkey for write access.
var ourKey = Registry.CurrentUser.CreateSubKey("Software\\Resources\\Shared");