C# 如何使用从其他方法返回的类型调用泛型方法?

C# 如何使用从其他方法返回的类型调用泛型方法?,c#,C#,我有两种类型的人和组织都继承自IContact 我有一个基于某种逻辑返回其中一种类型的方法 private Type GetPersonOrOrganisation(string some variable) { either returns Person or Organisation type } 我有一种查询数据库中人员或组织的方法: public static IQueryable<T> Query<T>(this IUow uow) where T :

我有两种类型的人和组织都继承自
IContact

我有一个基于某种逻辑返回其中一种类型的方法

private Type GetPersonOrOrganisation(string some variable)
{
   either returns Person or Organisation type
}
我有一种查询数据库中人员或组织的方法:

public static IQueryable<T> Query<T>(this IUow uow) where T : IContact
        {
            return uow.Query<T>();
        }
其中联系人类型为个人或组织

很明显,这不会编译,这是我的问题。如何根据从
getPersonorOrganization
返回的内容从数据库中查询正确的类型,您不能这样做。 然而,你到底想要完成什么

考虑改用ArrayList或List。作为对查询中要返回的类型的修改,您可以对该方法进行如下调整:

public static IQueryable<T> Query<T>(this IUow uow, Type returnType) where T : IContact
{
  if(returnType is IContact) // code here
}
公共静态IQueryable查询(此IUow uow,键入returnType),其中T:IContact
{
if(returnType为IContact)//此处编码
}
这是可能有错误的快速代码

此stackoverflow链接已对此进行了讨论:

类型
和泛型之间移动是一大痛苦;没有重构的唯一答案是:反射;比如:

var method = typeof(SomeType).GetMethod("Query").MakeGenericMethod(contactType);
// this is to getch your Query<T>(this IUow) method

var contact = (IContact)method.Invoke(null, new object[] { uow });
var method=typeof(SomeType).GetMethod(“查询”).MakeGenericMethod(contactType);
//这是为了获取您的查询(此IUow)方法
var contact=(IContact)method.Invoke(null,新对象[]{uow});
这太可怕了。如果可能的话,我建议将您的
Query
方法重写为
Query(Type Type)
方法(returning
IContact
),它仍然可以通过
return(T)Query(typeof(T)),为现有代码提供一个通用的
Query
助手方法。然而,情况并非如此


如果要将类型为
T
的实例传递到方法中,可以使用
dynamic
为您执行类型/泛型/方法解析,从而简化此操作。

没有IContact GetPersonorOrganization(字符串某些变量)的原因是什么,我需要调用query的类型,因为query方法需要类型no作为该类型的实际对象。
var method = typeof(SomeType).GetMethod("Query").MakeGenericMethod(contactType);
// this is to getch your Query<T>(this IUow) method

var contact = (IContact)method.Invoke(null, new object[] { uow });