c#-如何设置反射调用参数的正确顺序?

c#-如何设置反射调用参数的正确顺序?,c#,.net,reflection,invoke,delegation,C#,.net,Reflection,Invoke,Delegation,我需要从任何类(在同一程序集中)调用任何方法,并将参数传递给trought。到目前为止还不错(我相信),但是调用ask-me以获得一个对象数组(我可以得到),但顺序与方法中预定义的顺序相同 我为参数制作了这个类: public class Parametros { public string type { get; set; } public string name { get; set; } public object value { get; set; } }

我需要从任何类(在同一程序集中)调用任何方法,并将参数传递给trought。到目前为止还不错(我相信),但是调用ask-me以获得一个对象数组(我可以得到),但顺序与方法中预定义的顺序相同

我为参数制作了这个类:

public  class Parametros {
    public string type { get; set; }
    public string name { get; set; }
    public object value { get; set; }

}
我的“调用”方法如下:

    public static void Executar(string namespaceClass, string metodo,List<Parametros> parametros) {
        Type type = Type.GetType(namespaceClass);
        Object obj = Activator.CreateInstance(type);
        MethodInfo methodInfo = type.GetMethod(metodo);
        List<object> myParams = new List<object>();
        foreach (Parametros myparam in parametros) {
            //Get and order the params
            myParams.Add(myparam.value);
        }

        methodInfo.Invoke(obj, myParams.ToArray());
    }
publicstaticvoidexecutar(字符串namespaceClass、字符串metodo、列表参数){
Type Type=Type.GetType(namespaceClass);
Object obj=Activator.CreateInstance(类型);
MethodInfo MethodInfo=type.GetMethod(metodo);
List myParams=new List();
foreach(Parametros中的Parametros myparam){
//获取并订购参数
myParams.Add(myparam.value);
}
调用(obj,myParams.ToArray());
}

如果没有在我的类
Parametros
中指定顺序的解决方案,有没有办法实现这一点,获取参数的名称并将其发送到invoke方法?

最后我得到了它,我将为任何需要它的人提供答案。它适用于静态和非静态类型。考虑到namespaceClass必须是
Namespace.etc.Class

    public static void Executar(string namespaceClass, string metodo, List<Parametros> parametros = null)
    {
        Type type = Type.GetType(namespaceClass);
        MethodInfo methodInfo = type.GetMethod(metodo);
        Object objectToInvoke;
        if (type.IsAbstract && type.IsSealed)
        {
            objectToInvoke = type;
        }
        else {
            objectToInvoke = Activator.CreateInstance(type);
        }

        ParameterInfo[] parametersFromMethod = methodInfo.GetParameters();



        if (parametros != null || (methodInfo != null && parametersFromMethod != null && parametersFromMethod.Length > 0))
        {
            List<object> myParams = new List<object>();
            foreach (ParameterInfo parameterFound in parametersFromMethod)
            {
                Parametros parametroEspecificado = parametros.Where(p => p.name == parameterFound.Name).FirstOrDefault();
                if (parametroEspecificado != null)
                {
                    myParams.Add(parametroEspecificado.value);
                }
                else
                {
                    myParams.Add(null);
                }

            }

            methodInfo.Invoke(objectToInvoke, myParams.ToArray());

        }
        else
        {
            methodInfo.Invoke(objectToInvoke, null);
        }


    }
publicstaticvoidexecutar(字符串namespaceClass,字符串metodo,列表参数=null)
{
Type Type=Type.GetType(namespaceClass);
MethodInfo MethodInfo=type.GetMethod(metodo);
对象对象对象为Invoke;
if(type.isastract&&type.IsSealed)
{
objectToInvoke=类型;
}
否则{
objectToInvoke=Activator.CreateInstance(类型);
}
ParameterInfo[]parametersFromMethod=methodInfo.GetParameters();
if(parametros!=null | | |(methodInfo!=null&¶metersfromthod!=null&¶metersfromthod.Length>0))
{
List myParams=new List();
foreach(ParameterInfo Parameter在parametersFromMethod中找到)
{
Parametros parametrospecificado=Parametros.Where(p=>p.name==parameterFound.name).FirstOrDefault();
if(parametrospecificado!=null)
{
添加(parametrospecificado.value);
}
其他的
{
myParams.Add(空);
}
}
调用(objectToInvoke,myParams.ToArray());
}
其他的
{
调用(objectToInvoke,null);
}
}