gpt4 book ai didi

c# - 当类型参数未知时如何调用泛型实例的方法?

转载 作者:行者123 更新时间:2023-11-30 21:23:09 25 4
gpt4 key购买 nike

这似乎是基本问题,但我正在努力解决(可能是因为累了)。

例如- 如果我像这样创建存储库实例 =>

var repositoryType = typeof(Repository<>).MakeGenericType(entityType);
// repository type==object :(
var repository = ServiceLocator.Current.GetInstance(repositoryType);

调用repository.All() 方法的最佳方式是什么?反射(reflection)是唯一的方法吗?

最佳答案

这取决于是否Repository<>公开一些非通用接口(interface)(如 ITable 与 LINQ-to-SQL 中的 Table<T> 相比)。如果没有,则必须使用反射。如果它,则转换为非通用接口(interface):

IRepository repository = (IRepository)ServiceLocator
.Current.GetInstance(repositoryType);
IList data = repository.All();

在 4.0 中,您还可以考虑 dynamic :

dynamic repository = ServiceLocator.Current.GetInstance(repositoryType); 
IList data = repository.All();

关于c# - 当类型参数未知时如何调用泛型实例的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com