C#调用Process.Start传string[]报错无法转换为string如何解决
问题原因分析
你出现类型转换错误的核心原因是 .NET Framework 4.7.2 版本的 Process 类没有提供接受 string[] 或 IEnumerable<string> 类型入参的 Start 重载,该重载是在 .NET Core 3.0 及后续的 .NET 5+ 版本才新增的,你使用的 .NET Framework 版本不支持该语法,所以编译器会尝试将你的 string[] 参数匹配到现有的 Start(string) 重载,自然就抛出类型不匹配的错误。
另外你当前调用的是 Process 的实例方法 Start(),该实例方法本身是无参的,参数本身就应该提前配置到 StartInfo 属性中,而非传入 Start 方法。
正确实现方案
你不需要用SQLite中转参数,直接将参数拼接为符合命令行规则的字符串,赋值给 StartInfo.Arguments 即可,注意要对包含空格、特殊字符的参数做转义处理,避免参数被错误拆分。
修正后的代码示例:
class Program_Console { public static void Main(string[] tsArgs) { tsArgs = new string[] { "Test Pass0", "TP1", "TP2" }; Process p = new Process(); try { p.StartInfo.FileName = BURS_Dir; // 拼接参数,带空格的参数自动包裹双引号,同时转义参数内的双引号 p.StartInfo.Arguments = string.Join(" ", tsArgs.Select(arg => $"\"{arg.Replace("\"", "\\\"")}\"")); // 实例方法Start无参,参数由StartInfo提供 p.Start(); } catch (Exception ex) { // 异常处理逻辑 } } } public class Program_UI { // 注意:程序入口点必须是静态方法,你原有代码的实例方法无法作为入口 [STAThread] static void Main(string[] tsArgs) { // 此处拿到的tsArgs就是控制台程序传入的参数数组,无需额外处理 // UI逻辑 } }
额外注意点
- 你原有UI程序的Main方法写为实例方法,不符合.NET程序入口点的要求,必须修改为static静态方法,否则UI程序无法正常接收传入的参数
- 如果参数中包含中文、特殊符号,可额外配置
p.StartInfo.StandardOutputEncoding = Encoding.UTF8等编码规则避免乱码
内容的提问来源于stack exchange,提问作者Art Hansen
相关产品推荐
相关产品推荐

