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

...然后,当然,我得到了一个错误消息,即“空控制语句体”

更新

实际上,我认为我需要的是以下内容,因为“-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,您可以拥有grabNext 的前一个arg 值,因为它仅在arg == "-AA" 时被覆盖。

上一次迭代中的 GrabNext 可能是真的。

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

请注意,代码始终设置incomingPlatypusID"-AA"(如果 args 包含它)。

增加可读性并放入grabNext它所属的范围,因为它只在那里使用。

以下是更多信息:C# 中的变量范围

摘抄:

在 C# 中,最好将它们放在需要它们的范围内。这有一些好处,包括:

  • 您可以降低因不恰当地重用变量而出错的风险,尤其是在长期维护期间
  • 您将变量限制在该范围内,这简化了重构

请注意,相同的语句使用 Linq 可能更具可读性:

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

编辑:根据您修改后的问题进行更新。for-loop如果要使用索引器,请改用 a 。

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 回答