我创建了一个方法,根据传递的命令行参数提供不同的消息框输出结果。
目前我每次想要更改命令行参数字符串时都必须开始调试。
有没有办法在调试会话期间更改命令行参数?
编辑:我添加了一些示例代码
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。
您建议使用哪种方法快速更改命令行参数?考虑我正在使用的上述代码。
答案 0 :(得分:2)
问题不在于更改命令行参数,而在于重新执行已使用不同参数执行的代码。根据我的理解,您需要使用不同的命令行参数来测试您的程序。请考虑以下解决方案以实现您的目标:
PerformMain
的方法(string[] args
)就像Main
方法一样Main
方法Main
可能包含字符串[]列表,这些是要执行的测试用例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
}
答案 1 :(得分:1)
无法更改启动进程的命令行。但是,您可以在应用程序的早期将参数复制到易于访问的“设置”对象中,然后再操作它。
编辑:每次调用命令行时,不是对象中的属性解析命令行,而是将属性更改为常规属性。然后使用Initialise
方法(或使用构造函数,甚至),以便在启动时只解析一次命令行。然后,您可以使用立即窗口随意更改属性的值,因为它们不会每次都返回命令行。