0

パラメータ名とフィールド名が異なる場合、パラメータの値を取得するにはどうすればよいですか? これまで約2日間調査しましたが、解決策を見つけることができませんでした。どんな助けでも感謝します。以下にサンプルコードを用意しました。

class Class1
{        
    public void method(string firstname, string lastname, out string name)
    {
        name = lastname + ", " + firstname;
    }
}

class Names
{
    public string First
    {
        get;
        set;
    }
    public string Last
    {
        get;
        set;
    }
}

class FullName
{
    public string Full
    {
        set;
        get;
    }
}
private void btnExecute_Click(object sender, EventArgs e)
{
        Class1 cls = new Class1();
        Names request = new Names();
        request.First = "Mohanraj";
        request.Last = "Devadoss";
        FullName response = new FullName();

        MethodInfo methodInfo = cls.GetType().GetMethod("method");
        ParameterInfo[] parameters = methodInfo.GetParameters();
        ParameterInfo returnParameter = methodInfo.ReturnParameter;
        var inputParameters = new object[parameters.Length];

        Type requestType = request.GetType();
        PropertyInfo[] properties = requestType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
        object result = null;
        int count = 0;
        const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;

        foreach (ParameterInfo parameter in parameters)
        {
            PropertyInfo property = requestType.GetProperty(parameter.Name);
            FieldInfo field = requestType.GetField(parameter.Name);
            MemberInfo[] members = requestType.GetFields(bindingFlags).Cast<MemberInfo>().Concat(requestType.GetProperties(bindingFlags)).ToArray();

            object value = null;

            try { value = property.GetValue(request, null); }
            catch { value = null; }
            try
            {
                value = field.GetValue(request);
            }
            catch
            {
                value = null;
            }

            if (parameter.ParameterType.IsByRef)
            {
                value = null;
            }

            inputParameters[count] = value;
            count = count + 1;
        }

        result = methodInfo.Invoke(cls, inputParameters);
}
4

1 に答える 1