将变量ViewModel类型作为泛型传递给方法

不要投票

我有一种适用于泛型的方法:

public static IRestResponse<T> Get<T>(long id, string apiEndPoint) where T : new()
{
        return Execute<T>(Method.GET, null, string.Concat(apiEndPoint, "/", id));
}

我使用此方法以通用的方式传递视图模型以获取解析结果:

var result = RestHelper.Get<AnyViewModel>(1, "Country"));

但是我遇到一个例子,我有一个变量实体,可以从中获取视图模型:

var entity = "Country"; // This comes as a parameter
var viewModels = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.FullName.Contains("Core.ViewModel"));

if (viewModels != null)
{
    Type viewModel = viewModels.GetTypes().FirstOrDefault(x => x.Name.Contains(entity));

    if (viewModel != null)
    {
        var result = RestHelper.Get<???>(1, entity);
    }
}

因此,我可以通过反射获得视图模型类型,但是我不知道该如何传递给<???>函数泛型。

更新

我不知道这会对反射产生多大的影响,但是我对该Get方法有更多的重载

public static IRestResponse Get(string apiEndPoint)
public static IRestResponse<T> Get<T>(string apiEndPoint) where T : new()
public static IRestResponse Get(long id, string apiEndPoint)
public static IRestResponse<T> Get<T>(long id, string apiEndPoint) where T : new()
麦加纳格

您将必须使用反射使用Get<T>泛型参数来调用方法MakeGenericMethod

编辑由于存在多个重载,请GetMethods改用并将其缩小到您要查找的重载(我看不到GetMethod可以让您指定类型实参的重载。)

MethodInfo method = typeof(RestHelper).GetMethods(BindingFlags.Static | BindingFlags.Public)
    .Where(method => method.Name == "Get" 
        && m.GetGenericArguments().Length == 1
        && m.GetParameters().Length == 2
        // just to be certain, in case someone adds more overloads in the future ...
        && m.GetParameters()[0].ParameterType == typeof(int)
        && m.GetParameters()[1].ParameterType == typeof(string))
    .FirstOrDefault();
if (method == null)
    throw new InvalidOperationException("Couldn't find an overload of RestHelper.Get<T> with int, string parameters");
MethodInfo genericMethod = method.MakeGenericMethod(viewModel);
genericMethod.Invoke(null, new object[] { 1, entity });

编辑

要使用“ List<viewModel>”,您可以使用Type.MakeGenericType获取List<T>

var genericType = typeof(List<>).MakeGenericType(viewModel);
var genericMethod = method.MakeGenericMethod(genericType);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

如何将2个泛型类型传递给扩展方法

来自分类Dev

将子类传递给baseClass定义方法的泛型方法?

来自分类Dev

如何将两种泛型类型传递给扩展方法

来自分类Dev

将泛型作为参数传递时,泛型方法无法识别

来自分类Dev

动态将对象类型传递给泛型方法

来自分类Dev

无法将匿名类型传递给泛型构造函数

来自分类Dev

无法将char []传递给泛型方法

来自分类Dev

如何将泛型传递给泛型方法?

来自分类Dev

将泛型类型传递给方法

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

将字符串作为变量传递给文字方法类型提示

来自分类Dev

DryIoC根据泛型类型参数将参数传递给开放泛型服务的构造函数

来自分类Dev

如何将类型(泛型)传递给注释?

来自分类Dev

将变量类型作为泛型传递给递归工厂

来自分类Dev

将泛型类型类传递给方法

来自分类Dev

将属性的类型传递给泛型类型

来自分类Dev

将泛型类型传递给方法

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

C#将类类型的字典传递给泛型

来自分类Dev

将(本地)变量作为类型传递给泛型方法

来自分类Dev

通过反射将子类类型传递给Java泛型方法不会引发异常

来自分类Dev

Delphi - 将 TValue 传递给泛型方法

来自分类Dev

将动态类型的实例传递给泛型类中的泛型方法

来自分类Dev

将实体框架类型传递给泛型方法

来自分类Dev

将泛型类传递给返回相同类的泛型 ObservableCollection 的方法

来自分类Dev

将泛型参数传递给方法

来自分类Dev

通过将 Unit 作为类型传递给泛型特征的可选方法参数

Related 相关文章

  1. 1

    将类型参数作为类型参数的类传递给Java中的泛型方法

  2. 2

    将类型参数作为类型参数的类传递给Java中的泛型方法

  3. 3

    如何将2个泛型类型传递给扩展方法

  4. 4

    将子类传递给baseClass定义方法的泛型方法?

  5. 5

    如何将两种泛型类型传递给扩展方法

  6. 6

    将泛型作为参数传递时,泛型方法无法识别

  7. 7

    动态将对象类型传递给泛型方法

  8. 8

    无法将匿名类型传递给泛型构造函数

  9. 9

    无法将char []传递给泛型方法

  10. 10

    如何将泛型传递给泛型方法?

  11. 11

    将泛型类型传递给方法

  12. 12

    如何在Java中将泛型列表类作为参数传递给泛型方法?

  13. 13

    将字符串作为变量传递给文字方法类型提示

  14. 14

    DryIoC根据泛型类型参数将参数传递给开放泛型服务的构造函数

  15. 15

    如何将类型(泛型)传递给注释?

  16. 16

    将变量类型作为泛型传递给递归工厂

  17. 17

    将泛型类型类传递给方法

  18. 18

    将属性的类型传递给泛型类型

  19. 19

    将泛型类型传递给方法

  20. 20

    如何在Java中将泛型列表类作为参数传递给泛型方法?

  21. 21

    C#将类类型的字典传递给泛型

  22. 22

    将(本地)变量作为类型传递给泛型方法

  23. 23

    通过反射将子类类型传递给Java泛型方法不会引发异常

  24. 24

    Delphi - 将 TValue 传递给泛型方法

  25. 25

    将动态类型的实例传递给泛型类中的泛型方法

  26. 26

    将实体框架类型传递给泛型方法

  27. 27

    将泛型类传递给返回相同类的泛型 ObservableCollection 的方法

  28. 28

    将泛型参数传递给方法

  29. 29

    通过将 Unit 作为类型传递给泛型特征的可选方法参数

热门标签

归档