10

以下のコードの i++ の時点で、Visual Studio に「到達不能なコードが検出されました」というメッセージが表示されます。私が間違ったことを見つけられますか?

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;
    }
}
4

5 に答える 5

24

問題は、これが実際にはループではないことです。休憩には条件がないので、同等に次のように書くことができます

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;
}
于 2009-09-25T09:59:06.910 に答える
11

最初の反復が終了する前に、ループから抜け出しています。

于 2009-09-25T09:57:40.580 に答える
3

問題はbreak;、ループ内で他のことを行う可能性がないため、 i ( ) のインクリメントにi++決して到達しないことです。

于 2009-09-25T09:59:54.677 に答える
0

たとえば Entity Framework を使用し、その参照をそのプロジェクトに追加しなかった場合、到達不能なコードを取得することにもなります。

A Data Layer Project や Domain Classes のようないくつかのプロジェクトがあるとします。次に、テスト用のコンソール アプリなどを作成し、dbcontext がどこにあるかを参照します。ループなどを書き込もうとすると、コードに到達できなくなります...

于 2013-03-13T23:15:36.127 に答える
0

問題は解決しましたが、これを伝える必要がありますが、目的に合わせて CreateSubKey() メソッドを使用できます。より良い選択だと思います。:)

//Creates a new subkey or opens an existing subkey for write access.
var ourKey = Registry.CurrentUser.CreateSubKey("Software\\Resources\\Shared");
于 2012-05-12T21:02:40.430 に答える