在C#程序里,static void Main(string[] args)是控制台应用、部分桌面应用的默认入口方法,其中args就是用来接收命令行参数的字符串数组。下面我们通过示例一步步了解它的用法。

args参数的基本含义
args的全称是arguments,也就是参数,它的类型是string[],也就是字符串数组。当我们通过命令行启动C#程序时,可以在程序名称后面跟上多个参数,这些参数会被系统自动收集到args数组里,我们在Main方法中就可以直接读取和使用这些参数。
基础使用示例
我们先写一个简单的控制台程序,打印出传入的所有参数,看看args的实际内容:
using System;
namespace MainArgsDemo
{
class Program
{
static void Main(string[] args)
{
// 先判断是否有传入参数
if (args.Length == 0)
{
Console.WriteLine("没有传入任何命令行参数");
return;
}
// 打印参数个数
Console.WriteLine($"一共传入了{args.Length}个参数:");
// 遍历打印每个参数
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine($"第{i+1}个参数:{args[i]}");
}
}
}
}如何传入命令行参数
有两种常见的方式给程序传入args参数:
1. 通过命令行直接启动
先把上面的程序编译成exe文件,假设生成的文件是MainArgsDemo.exe,打开命令行工具,切换到exe所在目录,输入以下命令:
MainArgsDemo.exe hello world 123
程序运行后会输出:
一共传入了3个参数: 第1个参数:hello 第2个参数:world 第3个参数:123
2. 在Visual Studio中配置调试参数
如果是开发阶段调试,不需要每次都打开命令行,可以在项目属性里配置调试用的参数:右键项目选择属性,找到调试选项卡,在应用程序参数框里输入要传入的参数,比如输入test 456 "带空格的参数",然后启动调试,程序就能接收到这些参数了。
参数的解析规则
命令行参数的拆分遵循简单的规则:
- 多个参数之间用空格分隔
- 如果参数本身包含空格,需要用英文双引号把整个参数包起来,系统会把引号里的内容当作一个完整参数
- 参数默认都是字符串类型,如果需要其他类型(比如数字),需要手动做类型转换
实际开发场景示例
比如我们要写一个文件复制的小工具,通过参数传入源文件路径和目标文件路径,示例代码如下:
using System;
using System.IO;
namespace FileCopyTool
{
class Program
{
static void Main(string[] args)
{
// 校验参数个数,需要源路径和目标路径两个参数
if (args.Length != 2)
{
Console.WriteLine("用法:FileCopyTool.exe 源文件路径 目标文件路径");
Console.WriteLine("示例:FileCopyTool.exe D:\\test.txt E:\\backup.txt");
return;
}
string sourcePath = args[0];
string targetPath = args[1];
// 检查源文件是否存在
if (!File.Exists(sourcePath))
{
Console.WriteLine($"源文件不存在:{sourcePath}");
return;
}
try
{
File.Copy(sourcePath, targetPath, true);
Console.WriteLine($"文件复制成功,从{sourcePath}到{targetPath}");
}
catch (Exception ex)
{
Console.WriteLine($"复制失败:{ex.Message}");
}
}
}
}注意事项
- args数组的索引从0开始,访问时要注意不要超出数组长度,避免索引越界异常
- 如果参数需要包含特殊字符,要注意命令行的转义规则,或者尽量用引号包裹参数
- 如果程序不需要接收外部参数,也可以把Main方法的参数省略,写成
static void Main(),编译器会自动兼容
注意:如果是ASP.NET Core等Web应用,默认的Main方法也可能带args参数,这些参数通常是用来接收启动时的配置参数,比如端口号、环境变量等,用法和控制台程序类似。
通过上面的示例和说明,相信你已经完全理解static void Main(string[] args)里args参数的作用和使用方法了,在需要接收外部输入的工具类程序开发中,这个特性会非常有用。