我有一个对象是:
IQueryable<Foo>
Run Code Online (Sandbox Code Playgroud)
我想将它传递给一个期望:
IQueryable<IFoo>
Run Code Online (Sandbox Code Playgroud)
Foo DOES实现了IFoo
为什么不编译?转换成这项工作的最佳方法是什么?
在.NET 4 BCL中添加了协变量和反变量,并且在.NET 3.5 BCL中不存在.
通过使用Select强制转换为接口类型的操作,您可以在3.5中解决此限制:
IQueryable<Foo> foos = ..;
myFunc(foos.Select(x => (IFoo)x));
Run Code Online (Sandbox Code Playgroud)
编辑(来自里德的评论,如下):
IQueryable<Foo> foos = ..;
myFunc(foos.Cast<IFoo>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |