【问题标题】:How to set Generic Type T as string in C#如何在 C# 中将通用类型 T 设置为字符串
【发布时间】:2017-09-08 13:56:57
【问题描述】:

我有一个类型的全名作为字符串,我想用这个字符串来告诉泛型方法的类型。看到这个

      string typeStr ="Dll.NameSpace.MyType";
      var list = new List<Dll.NameSpace.MyType>();//should put typeStr here
      var result = call.SomeGenericMethod<...>(obj);//should put typeStr here

This answer 没有帮助我。如果你尝试访问this other one,它并不能满足我的需求。

编辑:我试图调用的通用方法是扩展方法。我没有成功尝试以下代码, method 仍然为空

     var result = repo.Get();
     Type elementType = 
             Type.GetType("x2o_Care.Models.ViewModels.PatientViewModel");
     MethodInfo method =typeof(AutoMapper.QueryableExtensions.Extensions) 
                      .GetMethod("ProjectTo", new[] { typeof(IQueryable)});
        MethodInfo generic = method.MakeGenericMethod(elementType);

        var model = generic.Invoke(result.OrderBy(e => true).Take(20), null);

【问题讨论】:

标签: c# generics


【解决方案1】:

您的代码正是您所需要的。您只需要准确指定您需要的 ProjectTo 方法的重载,因为有几个。确保在 GetMethod/ 中指定所有参数

例如:

MethodInfo method =typeof(AutoMapper.QueryableExtensions.Extensions) 
                      .GetMethod("ProjectTo", new[] { typeof(IQueryable),
                          typeof(object), 
                          typeof(Expression<Func<TDestination, object>>[]) 
                        });

以下是所有 ProjectTo 方法的列表: https://github.com/AutoMapper/AutoMapper/blob/master/src/AutoMapper/QueryableExtensions/Extensions.cs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2014-05-08
    • 1970-01-01
    • 2012-09-28
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多