您好我正在尝试使用C#反射来调用传递参数的方法,并作为回报传递回结果.我怎样才能做到这一点?我尝试了几件事但没有成功.我已经习惯了PHP和Python,这可以在一行上完成,所以这对我来说非常困惑.
实质上,这就是如何在没有反射的情况下进行调用:
response = service.CreateAmbience(request);
Run Code Online (Sandbox Code Playgroud)
请求有以下对象:
request.UserId = (long)Constants.defaultAmbience["UserId"];
request.Ambience.CountryId = (long[])Constants.defaultAmbience["CountryId"];
request.Ambience.Name.DefaultText = (string)Constants.defaultAmbience["NameDefaultText"];
request.Ambience.Name.LanguageText = GetCultureTextLanguageText((string)Constants.defaultAmbience["NameCulture"], (string)Constants.defaultAmbience["NameText"]);
request.Ambience.Description.DefaultText = (string)Constants.defaultAmbience["DescriptionText"];
request.Ambience.Description.LanguageText = GetCultureTextLanguageText((string)Constants.defaultAmbience["DescriptionCulture"], (string)Constants.defaultAmbience["DescriptionDefaultText"]);
Run Code Online (Sandbox Code Playgroud)
这是我实现反射的函数,其中上面案例的serviceAction将是"CreateAmbience":
public static R ResponseHelper<T,R>(T request, String serviceAction)
{
ICMSCoreContentService service = new ContentServiceRef.CMSCoreContentServiceClient();
R response = default(R);
response = ???
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 47
有点像:
MethodInfo method = service.GetType().GetMethod(serviceAction);
object result = method.Invoke(service, new object[] { request });
return (R) result;
Run Code Online (Sandbox Code Playgroud)
您可能希望在每个级别添加检查,以确保所讨论的方法实际上有效,它具有正确的参数类型,并且它具有正确的返回类型.这应该足以让你开始.
Bri*_*ott 13
这是使用反射按名称调用对象方法的快速示例:
Type thisType = <your object>.GetType();
MethodInfo theMethod = thisType.GetMethod(<The Method Name>);
theMethod.Invoke(this, <an object [] of parameters or null>);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44668 次 |
| 最近记录: |