gpt4 book ai didi

c# - 处理命令行参数时清理控制流 [C#]

转载 作者:太空狗 更新时间:2023-10-30 00:28:40 25 4
gpt4 key购买 nike

我正在处理一个程序,它根据命令行参数执行大量 if...else 分支。这是在 C# 中,但我确信它适用于 Java、C++ 等。这是一般大纲:

if (args.Length == 0)
{
//do something
}

if (args.Length > 0 && args.Length < 2)
{
Console.WriteLine("Only one argument specified. Need two arguments");
return 0;

}
else if (args.Length > 0 && args.Length >= 2)
{
//Process file - Argument 1
if(args[0].Trim() == PROCESS_OPTION_ONE
|| args[0].Trim() == PROCESS_OPTION_TWO)
{
//Process file - Argument 2
if(args[1].Trim() == PROCESS_CUSTOMER
|| args[1].Trim() == PROCESS_ADMIN
|| args[1].Trim() == PROCESS_MEMBER
|| args[1].Trim() == PROCESS_GUEST
|| args[1].Trim() == PROCESS_USER
)
{

如您所知,这有点乱。是否有一种或两种最适用于清理一些东西的设计模式?也许是命令模式?感谢您的建议和提示。

最佳答案

停止嵌套。

您可以像 (+1) Joel 所说的那样切换,或者您可以将逻辑分解为清晰的方法调用。

if(args.Length <= 1)
{
Console.WriteLine("Need 2 args kthx");
return;
}
if(args.Length > 2)
{
Console.WriteLine("More than 2 args don't know what do");
return;
}

var arg1 = args[0].Trim();
var arg2 = args[1].Trim();

switch(arg1)
{
case PROCESS_OPTION_ONE:
ProcessOptionOne(arg2);
break;
case PROCESS_OPTION_TWO:
ProcessOptionTwo(arg2);
break;
default:
Console.WriteLine("First arg unknown I give up");
return;
}

然后,在您的处理方法中...

private static void ProcessOptionTwo(string argumentTwo)
{
if(argumentTwo == PROCESS_CUSTOMER ||
argumentTwo == PROCESS_ADMIN ||
/* etc blah blah */
}

让您的方法尽可能简单,并将较长的、令人困惑的算法分解为不同的方法调用,这些方法调用通过它们的名称清楚地表明它们在做什么。

关于c# - 处理命令行参数时清理控制流 [C#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com