1

私はこのコードを持っていました:

string[] args = Environment.GetCommandLineArgs();
bool grabNext;
foreach (string arg in args)
{
    if (arg == "-AA")
    {
        grabNext = true;
    }
    if (grabNext)
    {
        incomingPlatypusID = arg;
    }
}

...そしてResharperは、内部スコープで「bool grabNext」を宣言することを提案したので、許可すると、コードは次のようになりました。

string[] args = Environment.GetCommandLineArgs();

foreach (string arg in args)
{
    if (arg == "-AA") ;
    bool grabNext;
    {
        grabNext = true;
    }
    if (grabNext)
    {
        incomingPlatypusID = arg;
    }
}

...そして、もちろん、私はerr msg、つまり「Emptycontrolstatementbody」を受け取りました。

アップデート

実際、私が必要だと思うのは次のとおりです。「-AA」は次の引数を取得するための私の指示です。

foreach (string arg in args)
{
    if (arg == "-AA")
    {
        grabNext = true;
        continue;
    } 
    if (grabNext)
    {
        PlatypusID = arg;
        break;
    } 
}

更新2

このコードでは、Resharperは文句を言いません:

private void AutoProvMainForm_Load(object sender, EventArgs e)
{
    string[] args = Environment.GetCommandLineArgs();
    bool grabNext = false;

    foreach (string arg in args)
    {
        if (arg == "-AA")
        {
            grabNext = true;
            continue;
        } 
        if (grabNext)
        {
            PlatypusID = arg;
            break;
        } 
    }
}
4

2 に答える 2

1

for eachの外部でgrabNextが宣言されている場合、arg == "-AA"の場合にのみオーバーライドされるため、grabNextの以前のarg値を持つことができます。

GrabNextは、前の反復からtrueになる可能性があります。

于 2012-09-06T22:47:20.993 に答える
1

Reshaperが望んでいるのは、次のようなものです。

foreach (string arg in args)
{
    bool grabNext = (arg == "-AA");
    if (grabNext)
    {
        incomingPlatypusID = arg;
        // probably better break now:
        break;
    }
}

コードは常に(argsに含まれている場合)に設定incomingPlatypusID されることに注意してください。"-AA"

可読性が向上grabNextし、そこでのみ使用されるため、それが属するスコープに入れられます。

詳細は次のとおりです。C#の変数のスコープ

抜粋:

C#では、必要なスコープに配置することをお勧めします。これには、次のようないくつかの利点があります。

  • 特に長期的なメンテナンス中に、変数を不適切に再利用することによるエラーのリスクを軽減します
  • そのスコープ内で変数を制約したままにしておくと、リファクタリングが容易になります

Linqを使用すると、同じステートメントがさらに読みやすくなる可能性があることに注意してください。

incomingPlatypusID = args.FirstOrDefault(a => a == "-AA");

編集:変更した質問に従って更新します。for-loopインデクサーを使用する場合は、代わりに使用してください。

for( int i = 0; i < args.Length; i++ )
{
    if( args[i] == "-AA" && i+1 < args.Length )
    {
         incomingPlatypusID = args[ i+1 ];
         break;
    }
} 
于 2012-09-06T22:43:52.807 に答える