我有一个对象数组,所有对象数组都填充了特定的命令参数(类型string
):
object[] args = {"@all", "1", "true"};
我有这个方法:
public void Method(string client, int num, bool type)<br/>
我想将对象数组中指定的参数传递给方法。如何将每个对象数组元素转换为方法所期望的特定类型?
注意:方法参数类型未修复,因此我需要将对象数组中的项目转换为编译时未知的不同类型。
第49行格式错误: https://pastebin.com/bQLsbs59
答案 0 :(得分:1)
您可以使用MethodInfo
获取方法的参数。然后使用ParameterInfo
,您可以获得该参数的类型。然后最后一步是使用Convert
将每个字符串的类型更改为正确的类型。
object[] args = { "@all", "1", "true" };
MethodInfo methodInfo = typeof(Form1).GetMethod("Method");
ParameterInfo[] paramInfos = methodInfo.GetParameters();
// Should check that args.Length == paramInfos.Length.
// The arguments converted to their correct types will go in here.
object[] convertedArgs = new object[args.Length];
for (int i = 0; i < args.Length; i++)
{
// Should do a try/catch here in-case the string can't be
// converted to the parameter type. i.e. trying to convert
// "abc" to an int.
// Change each string to the appropriate type.
convertedArgs[i] = Convert.ChangeType(args[i],
paramInfos[i].ParameterType);
}
// Finally, we can call the method with the arguments that have
// been converted to the correct types.
methodInfo.Invoke(this, convertedArgs);