首页 > 解决方案 > C#将数组传递给数组但仍然出现“无法从'string []'转换为'string'”错误

问题描述

(在 Win 10 Pro 202H 上使用 VS Community 2019 v16.10.4)

我正在开发一个 C# 控制台/winforms 桌面应用程序,它监视一些本地驱动器属性并显示一条状态消息。状态消息显示通过任务计划程序执行(任务以编程方式定义和注册)。UI 使用 Process 方法从控制台应用程序执行。我的意图是将一个参数从调度程序传递给控制台应用程序,执行一些条件逻辑,然后将结果传递给 UI 条目 (Program.cs) 以进行进一步处理。

我正在测试将参数从控制台应用程序传递到 UI 入口点,我收到“参数 1:无法从 'string[]' 转换为 'string'”错误。

代码是:

class Program_Console
{
public static void Main(string[] tsArgs)
{
    // based on MSDN example
    tsArgs = new string[] { "Test Pass0", "TP1", "TP2" };
    Process p = new Process();
    try
    {
        p.StartInfo.FileName = BURS_Dir;
        p.Start(tsArgs); // error here
    }

public class Program_UI
{
[STAThread]
 public void Main(string[] tsArgs)
{

“tsArgs”不是一直是一个数组吗?

编辑:为清楚起见,我使用的是 .NET Framework 4.7.2。问题不在于我传递的内容的一致性,而在于 Process.Start(String, IEnumerable String) 重载。我相信“IEnumerable String”包括string[];它显然没有,因为我能够传递一个纯字符串(不是字符串变量——这也失败了——只是一个硬编码的字符串)。

如果它对某人有用,我的解决方法是将参数保存到控制台应用程序中的 SQLite 表中,然后将它们加载到 UI 应用程序中的列表中。我确信一个更熟练的程序员可以更有效地完成它。

标签: c#winformsconsole-application

解决方案


Start()将参数作为数组的唯一方法还需要文件名: Start(). 您不能通过设置文件名StartInfo,然后在方法调用中省略该参数。

以下内容应该适合您:

p.Start(BURS_Dir, tsArgs);

推荐阅读