パラメータ名とフィールド名が異なる場合、パラメータの値を取得するにはどうすればよいですか? これまで約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);
}