我最近开始通过这本书学习C#,我来到这个例子,我正在尝试打印从命令提示符传递的参数:
namespace SimpleCSharpApp
{
class Program
{
static void Main()
{
string[] theArgs = Environment.GetCommandLineArgs();
foreach(string arg in theArgs)
Console.WriteLine("Arg: {0}", arg);
}
}
}
我的命令提示符输入如下所示:
D:\ ... \ SimpleCSharpApp \ bin \ Debug> SimpleCSharpApp.exe arg1 arg2
输出如下所示:
Arg:SimpleCSharpApp.exe
Arg:arg1
Arg:arg2
我认为它看起来像是:
Arg:arg1
Arg:arg2
我的问题是,为什么它将我的执行命令识别为字符串参数的成员?为了得到我预期的输出,我应该改变什么?
我可以将foreach循环从第二个元素开始改为for循环,如下所示:
namespace SimpleCSharpApp
{
class Program
{
static void Main()
{
string[] theArgs = Environment.GetCommandLineArgs();
for (int i = 1; i < theArgs.Length; i++)
{
Console.WriteLine("Arg: {0}", theArgs[i]);
}
}
}
}
但是这并没有解决我的好奇心,我能以某种方式让它不像参数一样记录可执行文件并用foreach循环打印出来以获得我期望的输出吗?
提前致谢!
答案 0 :(得分:15)
这是documented行为
数组中的第一个元素包含正在执行的程序的文件名。如果文件名不可用,则第一个元素等于String.Empty。其余元素包含在命令行中输入的任何其他标记。
如果您想跳过第一个参数,请使用Skip
扩展方法。
foreach(string arg in theArgs.Skip(1))
Console.WriteLine("Arg: {0}", arg);
答案 1 :(得分:-1)
你可以使用传递给main的参数:
static void Main(string[] args)
{
foreach(string arg in args)
Console.WriteLine("Arg: {0}", arg);
}