我有这段代码:
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”是我抓住下一个arg的指示:
foreach (string arg in args)
{
if (arg == "-AA")
{
grabNext = true;
continue;
}
if (grabNext)
{
PlatypusID = arg;
break;
}
}
使用此代码,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;
}
}
}
答案 0 :(得分:1)
Reshaper想要的是这样的:
foreach (string arg in args)
{
bool grabNext = (arg == "-AA");
if (grabNext)
{
incomingPlatypusID = arg;
// probably better break now:
break;
}
}
请注意,代码始终将incomingPlatypusID
设置为"-AA"
(如果args包含它)。
提高可读性并将grabNext
放入其所属的范围,因为它仅在那里使用。
以下是更多信息:Scope of variables in 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;
}
}
答案 1 :(得分:1)
将grabNext声明为for each,你可以使用之前的arg值为grabNext,因为只有当arg ==“-AA”时它才会被覆盖。
GrabNext在上一次迭代中可能是真的。