我能否将类型对象传递给通用方法?

15

我有一个DataAccessLayer中的FindAll方法,代码如下:

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

一个客户端代码有一个Type[]数组,需要使用它来迭代调用FindAll方法,像这样:

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

但是编译器会报错:"需要类型或命名空间".. 有没有简单的方法来解决这个问题?我已经尝试过type.GetType()和typeof(type),但都没有起作用。
非常感谢!
2个回答

13
您可能需要使用反射来完成这个操作,类似于以下代码:
DataAccessLayer.GetType().GetMethod("FindAll<>").MakeGenericMethod(type).Invoke()

这篇博客文章 也可能包含您需要的信息。


是因为C#不支持动态类型(我听说在C# 4.0中已经支持了)所以我的原始代码无法正常工作? - theburningmonk
1
我不确定C# 4中的动态支持是否允许您以不同的方式执行此操作,因为我也不知道如何在那里提供动态泛型类型。但我还没有尝试过... - Lucero

3

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


是的,我现在意识到了,我试图使用目前不支持的动态类型,但是阅读 .Net 4.0 的资料后,C# 将引入对动态类型的支持,所以也许我尝试做的事情将来会成为可能! - theburningmonk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接