如何在控制台程序中接收参数?

4

我希望其他用户能够发送参数来运行我的程序,如何实现这样的功能?

7个回答

8

您是指启动时的参数吗?例如myapp.exe blah blah2 blah3

请将您的主方法修改为以下内容:

public static void Main(string[] args)
{

}

现在,args是传递到程序中的参数数组。因此,在示例中,args[0] == "blah"args[1] == "blah2"等。


1
@OP:只是出于好奇...你认为你所有程序中的 string[] args 究竟是用来做什么的? - mpen
在C#中,string[] args是可选的。也许他以前从未见过/使用过它? - Joel

8

如果你有一个Main方法(在命令行应用中你会有这个),你可以直接访问它们,作为args字符串数组参数。

public static void Main(string[] args) {
   var arg1 = args[0];
   var arg2 = args[1];
}

如果你在代码的其他位置,可以访问静态的Environment.GetCommandLineArgs方法。

//somewhere in your code
var args = Environment.GetCommandLineArgs();
var arg1 = args[0];
var arg2 = args[1];

4

该程序是从具有以下签名的方法运行的

public static void Main(string[] args)

参数args将包含通过空格分隔的命令行参数。

它是按空格分割的,还是比那更复杂?如果程序像这样被调用:myapp.exe "blah blah2",那么 args[0] == "blah blah2" 对吗? - rmeador
@rmeador 这取决于您的 shell(通常是 cmd.exe)。如果您想在参数中使用空格,则需要将其引用起来,您是正确的。如果使用另一个 shell(例如在 Unix 世界中常见的 bash 或在 PC 上使用 cygwin),您也可以使用 \ 进行转义,例如 ./mypapp.exe blah\ blah2 - Dolphin
@Dolphin 实际上,在 Windows (cmd) 上,我认为你也可以用反斜杠来转义空格。但是,我现在正在使用 Unix,所以不幸的是无法测试它。 - Tomas Aschan

3

这里也加一下。当我写答案时,我也在想这个问题。 - Mark Byers

2
您可以从Main的可选string[]参数中读取命令行参数。
static void Main(string[] args)
{
    if (args.Length >= 1)
    {
        string x = args[0];
        // etc...
    }
}

请注意,以下Main方法的声明也是有效的,但这样您就无法访问命令行参数:
static void Main()
{
    // ...
}

请查看文档以获取更多细节。


2
默认情况下,这是被支持的,参数将出现在传递给您的程序的args数组中。
public static void Main(string[] args)

如果你说

App.exe Hello World What's Up

在命令行中,你将会收到一个 args 数组,如下所示:
[0] = "Hello"
[1] = "World"
[2] = "What's"
[3] = "Up"

你需要确定想要哪些参数,以及它们的格式等等。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接