0

我创建了一个方法,它根据传递的命令行参数给出不同的消息框输出结果。

目前,每次我想更改命令行参数字符串时,我都必须开始调试。

有没有办法在调试会话期间更改命令行参数?

编辑:我添加了一些示例代码

private static class MyParsers
    {

    public static List<string> args;

    static MyParsers()
    {
        args = Environment.GetCommandLineArgs().ToList();
    }

        public static List<string> ParseOptions()
        {
            return ParseOptions(true);
        }

        public static List<string> ParseOptions(bool caseSensitive)
        {
            return caseSensitive
                   ? args
                   : args.MyExtToLower();
        }

        public static bool OptionExists(string option)
        {
            return OptionExists(option, true);
        }

        public static bool OptionExists(string option, bool caseSensitive)
        {
            return caseSensitive
                       ? ParseOptions().Contains(option)
                       : ParseOptions().MyExtToLower().Contains(option);
        }

        public static bool OptionExists(string option, string delimiter)
        {
            return OptionExists(option, false, delimiter);
        }

        public static bool OptionExists(string option, bool caseSensitive, string delimiter)
        {
            var args = ParseOptions(caseSensitive);
            for (var i = 1; i < args.Count; i++)
            {
                if (args[i].Contains(option + delimiter)) return true;
            }
            return false;
        }
}

然后我打电话MessageBox.Show(MyParsers.OptionExists("/list","=").ToString());

如果命令行参数是/list=blah它返回 true。

如果命令行参数是/listary它返回 false。

您建议使用什么方法快速更改命令行参数?考虑到我正在使用的上述代码。

4

2 回答 2

2

问题不在于更改命令行参数,而在于重新执行已经使用不同参数执行的代码。据我了解,您需要使用不同的命令行参数测试您的程序。请考虑以下解决方案以实现您的目标:

  • 定义一些方法(PerformMain),string[] args就像Main方法一样接受
  • 这个方法应该执行之前保存在Main方法中的代码
  • 您的 newMain可能包含一个字符串 [] 列表,这些是要执行的测试用例
  • 您遍历您的 string[] 列表并执行包装器,每次都传递不同的参数
  • 但是请注意,其中的代码包装器PerformMain必须是“无状态的”,以便连续执行能够正常工作
  • 这样您就可以轻松测试数百个案例

您的代码可能如下所示:

 static void Main(string[] args)
 {
     List<string[]> testCases = new List<string[]>();
     testCases.Add(new string[] { "/test", "xx" });
     testCases.Add(new string[] { "/other" });

     foreach (string[] testCase in testCases)
       Program.PerformMain(testCase);
 }

 static void PerformMain(string[] args)
 {
      // clear state of program
      // execute according to args
 }
于 2012-08-13T09:11:34.933 回答
1

无法更改启动进程的命令行。但是,您可以在应用程序的早期将参数复制到易于访问的“设置”对象中,然后对其进行操作。

编辑:不是每次调用时解析命令行的对象中的属性,而是将属性更改为常规属性。然后有一个Initialise方法(或使用构造函数,甚至),以便您在启动时只解析一次命令行。然后,您可以使用即时窗口随意更改属性的值,因为它们不是每次都返回命令行。

于 2012-08-13T09:12:29.657 回答