0

我是使用 manyconsole 的新手,我有一个关于处理用户输出的问题。我有将两个数字相乘的方法。我想打印我自己的错误消息,例如,我没有输入所有参数。据我所知,现在程序显示默认错误消息。我该如何改变呢?这是我的命令类

class MultCommand : ConsoleCommand
{
    public int Argument1;
    public int Argument2;
    public int c;

    public MultCommand()
    {
        IsCommand("mult","multiply numbers");
        HasAdditionalArguments(2, "<Argument1> <Argument2>");
    }

    public override int Run(string[] remainingArguments)
    {
        if (remainingArguments == null || remainingArguments.Length == 0)
        {
            Console.WriteLine("You enter no numbers");
        }
        else
        {
            Argument1 = Convert.ToInt32(remainingArguments[0]);
            Argument2 = Convert.ToInt32(remainingArguments[1]);
            c = Argument1 * Argument2;
        }

        Console.WriteLine("Your answer is " + c.ToString());

        return 0;
    }
}

这就是我要的You enter no numbers

这就是我得到的

Invalid number of arguments-- expected 2 more. 'mult' - multiply numbers Expected usage: Example.exe mult<Argument1> <Argument2>

4

2 回答 2

1

我想你想要的是:

throw new ConsoleHelpAsException("You entered no numbers.");

在处理参数之后和执行 Run() 之前,ManyConsole 将打印输入的摘要(命令类的所有公共成员,也许只有那些以大写字母开头的我忘记了)。为了使您对剩余参数的处理反映在该摘要中,将该参数提取移动到 OverrideAfterHandlingArgumentsBeforeRun 的覆盖:

public override int? OverrideAfterHandlingArgumentsBeforeRun (string[] remainingArguments)
{
    if (remainingArguments.Length != 2)
    {
        throw new ConsoleAsHelpException("You are expected to enter two numbers.");
    }
    else
    {
        Argument1 = Convert.ToInt32(remainingArguments[0]);
        Argument2 = Convert.ToInt32(remainingArguments[1]);
    }

    return base.OverrideAfterHandlingArgumentsBeforeRun (remainingArguments);
}

public override Run((string[] remainingArguments)
{
    c = Argument1 * Argument2;

    Console.WriteLine("Your answer is " + c.ToString());

    return 0;
}
于 2015-04-03T18:06:42.857 回答
1

另一种方法是覆盖该方法并根据您希望在传递的参数上获得的逻辑,将自定义消息作为异常参数CheckRequiredArguments抛出一个新的。ConsoleHelpAsException

于 2016-09-27T10:17:28.497 回答