2015-04-03 152 views
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>

回答

1

我想你想要的是:

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

處理完參數並執行Run()之前,ManyConsole將打印輸入的摘要(命令類的所有公共成員,也許只有以大寫字母開頭的那些成員纔會被忘記)。使您的remainingArguments的處理反映在總結,移動這樣的說法萃取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; 
} 
0

另一種方法是重寫CheckRequiredArguments方法,並拋出有一個新的ConsoleHelpAsException與您的自定義消息作爲例外的說法基於你想通過參數的邏輯。