Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c#代码向exe传递多个参数(超过3个)_C# - Fatal编程技术网

如何从c#代码向exe传递多个参数(超过3个)

如何从c#代码向exe传递多个参数(超过3个),c#,C#,我试图从C#代码调用exe,需要传递2个数组(array1,array2)、1个N×3矩阵(M1)和2个数字(int1,double2)。我发现了一个与我类似的问题: 有人能告诉我如何解决我的问题吗?非常感谢 参数始终是字符串。通过参数向程序传递数组或矩阵的唯一方法是将其转换为字符串。请注意,您的目标应用程序也应该使用此格式,并且必须将其反序列化回来 现在,这取决于您的实现。对于我来说,我建议使用JSON和JSON.NET库来实现这一点: // Serialize array to a stri

我试图从C#代码调用exe,需要传递2个数组(array1,array2)、1个N×3矩阵(M1)和2个数字(int1,double2)。我发现了一个与我类似的问题:


有人能告诉我如何解决我的问题吗?非常感谢

参数始终是字符串。通过参数向程序传递数组或矩阵的唯一方法是将其转换为字符串。请注意,您的目标应用程序也应该使用此格式,并且必须将其反序列化回来

现在,这取决于您的实现。对于我来说,我建议使用JSON和JSON.NET库来实现这一点:

// Serialize array to a string
int[] vals = new int[] { 1, 2, 3, 4, 5 };
string valsArgument = JsonConvert.SerializeObject(vals); // "[1,2,3,4,5]"

// In your target application
int[] vals = JsonConvert.DeserializeObject<int[]>(argument1);
//将数组序列化为字符串
int[]vals=新的int[]{1,2,3,4,5};
string valsArgument=JsonConvert.SerializeObject(VAL);//"[1,2,3,4,5]"
//在目标应用程序中
int[]vals=JsonConvert.DeserializeObject(argument1);
数组已从调用应用程序转移到被调用应用程序

请注意,以这种方式使用参数可能不是一个好主意。您可能需要使用外部文件或其他东西。

concole应用程序(我假设您提到的)可以处理作为字符串数组提供的任意数量的参数。这就是数组的问题:不能传递任何与简单字符串不同的内容。因此,您可以展平阵列,但会丢失所有参数属于一起的信息。您可能会为每个数组添加一个长度参数,但我想这会变得非常烦人:
myapp.exe v11 v12 v13 v21 v22 v33 v34 v35 v36 4
,意思是

取前三个参数并将它们合并到一个数组中,然后 适当地对以下两个和四个参数执行相同的操作


相反,您可以将所有这些参数写入一个外部文件(JSON、XML),该文件反映了参数的结构,并使用某种反序列化方式在应用程序中读取它们

您可以使用.NET中的DataContractJsonSerializer将段落序列化为字符串。这就是一个例子

// Create a User object and serialize it to a JSON stream.  
public static string WriteFromObject()  
{  
    //Create User object.  
    User user = new User("Bob", 42);  

    //Create a stream to serialize the object to.  
    MemoryStream ms = new MemoryStream();  

    // Serializer the User object to the stream.  
    DataContractJsonSerializer ser = new 
    DataContractJsonSerializer(typeof(User));  
    ser.WriteObject(ms, user);  
    byte[] json = ms.ToArray();  
    ms.Close();  
    return Encoding.UTF8.GetString(json, 0, json.Length);  
}  

// Deserialize a JSON stream to a User object.  
public static User ReadToObject(string json)  
{  
    User deserializedUser = new User();  
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));  
    DataContractJsonSerializer ser = new 
    DataContractJsonSerializer(deserializedUser.GetType());  
    deserializedUser = ser.ReadObject(ms) as User;  
    ms.Close();  
    return deserializedUser;  
}

exe是否支持此类命令行参数?请查看
MemoryMappedFile
;因此,您的
exe
abc.exe
将在内存中有一个文件进行交互(例如,传递和返回数组)
// Create a User object and serialize it to a JSON stream.  
public static string WriteFromObject()  
{  
    //Create User object.  
    User user = new User("Bob", 42);  

    //Create a stream to serialize the object to.  
    MemoryStream ms = new MemoryStream();  

    // Serializer the User object to the stream.  
    DataContractJsonSerializer ser = new 
    DataContractJsonSerializer(typeof(User));  
    ser.WriteObject(ms, user);  
    byte[] json = ms.ToArray();  
    ms.Close();  
    return Encoding.UTF8.GetString(json, 0, json.Length);  
}  

// Deserialize a JSON stream to a User object.  
public static User ReadToObject(string json)  
{  
    User deserializedUser = new User();  
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));  
    DataContractJsonSerializer ser = new 
    DataContractJsonSerializer(deserializedUser.GetType());  
    deserializedUser = ser.ReadObject(ms) as User;  
    ms.Close();  
    return deserializedUser;  
}