如何使用reflection按名称调用方法

您好我正在尝试使用C#reflection来调用传递参数的方法,并作为回报传递回结果。 我怎样才能做到这一点? 我尝试了几件事但没有成功。 我已经习惯了PHP和Python,这可以在一行上完成,所以这对我来说非常困惑。

实质上,这就是如何在没有reflection的情况下进行调用:

response = service.CreateAmbience(request); 

请求有以下对象:

 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"]); 

这是我实现reflection的函数,其中上面的案例的serviceAction将是“CreateAmbience”:

 public static R ResponseHelper(T request, String serviceAction) { ICMSCoreContentService service = new ContentServiceRef.CMSCoreContentServiceClient(); R response = default(R); response = ??? } 

有点像:

 MethodInfo method = service.GetType().GetMethod(serviceAction); object result = method.Invoke(service, new object[] { request }); return (R) result; 

您可能希望在每个级别添加检查,以确保相关方法实际上有效,它具有正确的参数类型,并且它具有正确的返回类型。 这应该足以让你开始。

以下是使用reflection按名称调用对象方法的快速示例:

 Type thisType = .GetType(); MethodInfo theMethod = thisType.GetMethod(); theMethod.Invoke(this, ); 

如果您使用的是.NET 4,请使用dynamic

 dynamic dService = service; var response = dService.CreateAmbience(request); 

您可以使用Delegate.CreateDelegate按名称获取方法的委托:

 public static R ResponseHelper(T request, string serviceAction) { var service = new ContentServiceRef.CMSCoreContentServiceClient(); var func = (Func)Delegate.CreateDelegate(typeof(Func), service, serviceAction); return func(request); }