将对象转换为Linq表达式中的泛型接口类型
本文关键字:泛型 接口类型 表达式 Linq 对象 转换 | 更新日期: 2023-09-27 18:17:04
这是一个与上一个问题相关的更一般的问题:
https://stackoverflow.com/questions/25193086/jsonserviceclient-call-from-list-of-generic-objects 我有几十个类,它们都实现了IReturn接口。例如:public class GetDataRequest : IReturn<GetDataResponse>
{
public string SomeQueryString { get; set; }
}
在另一个程序(用于测试)中,我使用linq从外部程序集中选择这些类型,然后创建一个实例并将其添加到对象列表中:
var DtoClasses = (from t in assembly.GetTypes()
where (typeof(IReturn)).IsAssignableFrom(t)
select Activator.CreateInstance(t)).ToList();
从对象列表中选择需要测试的类。问题是,这些对象将被输入的方法(我无法控制)具有IReturn的接口约束。尽管我所有的对象实际上都实现了那个接口,但似乎没有办法向编译器暗示这一点。
我的问题是我将如何采取通用对象,并将其转换成一个实现接口?假设所讨论的对象确实已经实现了接口,即使它的当前状态没有暗示它。
谢谢
在IEnumerable
上调用.Cast<IReturn>
:
List<IReturn> DtoClasses =
(from t in assembly.GetTypes()
where (typeof(IReturn)).IsAssignableFrom(t)
select Activator.CreateInstance(t))
.Cast<IReturn>()
.ToList();