处理wtih命令行参数时清理控制流[C#] [英] Cleaning up control flow when dealing wtih command line arguments [C#]

查看:194
本文介绍了处理wtih命令行参数时清理控制流[C#]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我处理的程序,做大量的IF ... ELSE分支基于命令行参数。这是在C#中,但我敢肯定,这适用于Java,C ++等,这里的大致轮廓:

I'm dealing with a program that does plenty of if...else branching based on command line arguments. This is in C# but I'm sure it's applicable to Java, C++ etc. Here's the general outline:

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
                        )
                    {

所以你可以说,这是怎样的一个烂摊子。有没有这将是最适合对清理的东西了一些设计模式还是两个? Command模式,也许?谢谢你的建议和提示。

So as you can tell, it's kind of a mess. Is there a design pattern or two that would be most applicable toward cleaning things up some? Command pattern, perhaps? Thanks for the advice and tips.

推荐答案

我偏爱使用参数数组switch语句,并在配置设置属性一流的某种每个预期的说法。看来你期待一个有固定格式的字符串参数,而不是允许设定值,你可以尝试:

I'm partial to using switch statements on the arguments array and setting properties in a configuration class of some kind for each anticipated argument. It appears you're expecting a very specifically formatted argument string rather than allowing set values, you could try:

if(args[0].Trim() == PROCESS_OPTION_ONE || args[0].Trim() == PROCESS_OPTION_TWO) 
{ 
    //Process file - Argument 2
    switch(args[1].Trim()
    {
        case PROCESS_CUSTOMER, PROCESS_ADMIN, PROCESS_MEMBER, PROCESS_GUEST, PROCESS_USER:
            // Do stuff
            break;
        default:
            // Do other stuff
            break;
    }
}

我的首选方法会像

foreach(string arg in args)
{
    switch(arg)
    {
        case PROCESS_CUSTOMER:
            // Set property
            break;
        ...
        default:
            // Exception?
            break;
    }
}

请注意:args.Length == 1速度更快比args.Length> 0安培;&安培; args.Length< 2.这也是一个有点更具可读性。

NOTE: args.Length == 1 is faster than args.Length > 0 && args.Length < 2. It's also a little more readable.

这篇关于处理wtih命令行参数时清理控制流[C#]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆