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)
方法(returningIContact
),它仍然可以通过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 });