2010-01-20 123 views
15

我有我的DataAccessLayer一个的FindAll方法,它看起来是这样的:我可以将类型对象传递给泛型方法吗?

public FindResult<T> FindAll<T>() where T : Entity, new() 

,并具有类型[]数组,它需要使用到反复调用的FindAll方法与这样的客户端代码:

foreach (var type in typeArray) 
{  
    var result = DataAccessLayer.FindAll<type>(); 
    ... 

但编译器抱怨“类型或命名空间预期”..有没有一种简单的方法来解决这个问题?我试过type.GetType()或typeof(类型),都没有工作。

非常感谢提前!

回答

13

您可能需要使用反射来做到这一点,是这样的:

DataAccessLayer.GetType().GetMethod("FindAll<>").MakeGenericMethod(type).Invoke() 

This blog post也可以包含你所需要的信息。

+0

是否因为C#不支持动态类型(我听说它在C#4.0中受支持),我的原始代码不起作用? – theburningmonk 2010-01-20 11:05:20

+1

我不确定C#4中的动态支持是否会允许您以不同的方式执行此操作,因为我不知道如何在其中提供动态泛型类型。但我还没有尝试过...... – Lucero 2010-01-20 20:35:02

3

使用泛型时,类型需要在编译时解决。您正在尝试在运行时提供该类型。

+0

是的,我意识到现在,我正在尝试使用目前不支持的动态打字,但在.NET 4.0上阅读,C#将引入对动态打字的支持,所以也许我想在不久的将来做到这一点! – theburningmonk 2010-01-20 11:23:19

相关问题