我需要将命令行参数解析为由方法签名定义的特定数据类型。因此,作为我Main
方法中的输入参数,我有一些可能的情况如下:
[11, 23, 32]
[1,24.254,3]
[ 124 ,2, 3.0125 ]
[1, 25, 03.1], 1 , "a", 42, "aac", ["aaa", "bbb", "ccc"]
具有所述案例的所有可能组合。当然,可能存在错误,如不平衡的括号,额外的,
或.
。所以,我可以成功验证不平衡的括号,但不知道如何解析和验证其他东西。同样,我现在所有元素必须由,
分隔并且知道每个元素的必要数据类型(如果我的方法是public void MyMethod(string[], int a, string b, double c)
我可以相应地解析它。)
是否有人知道如何实现这一目标,已经编写了解决方案或其他任何内容?
答案 0 :(得分:0)
string[] input = //CLI arguments separated by ,
// "YourType" is the type that holds your method
MethodInfo targetMethod = typeof(YourType).GetMethod("MyMethod");
// YourMethod's parameters
ParameterInfo[] parameters = targetMethod.GetParameters();
// This will contain the converted values
object[] arguments = new object[input.Length];
for(int i = 0; i < input.Length; i++)
{
Type paramType = parameters[i].ParameterType;
if (paramType.IsArray)
{
string[] arrayValues = input[i]
.Replace("[", String.Empty)
.Replace("]", String.Empty)
.Split(',');
arguments[i] = arrayValues
.Select(v => Convert.ChangeType(v, paramType.GetElementType())
.ToArray();
}
else
arguments[i] = Convert.ChangeType(input[i], paramType);
}
然后,您将使用转换后的值调用该方法。
如果MyMethod
是静态的:
targetMethod.Invoke(null, arguments);
如果MyMethod
是实例方法
YourType instance = // Instantiate a new object
targetMethod.Invoke(instance, arguments);