c# - 如果对象实现了该接口(interface),我可以将 IQueryable<Foo> 传递给 IQueryable<IFoo> 吗?

标签 c# .net-3.5

我有一个对象是:

IQueryable<Foo>

我想将它传递给一个函数,该函数需要:

IQueryable<IFoo>

Foo 确实实现了 IFoo

为什么不能编译?什么是最好的转换方式来让这项工作发挥作用?

最佳答案

协方差和逆方差在 .NET 4 BCL 中添加,在 .NET 3.5 BCL 中不存在。

在 3.5 中,您可以通过使用 Select 操作转换为您的接口(interface)类型来解决此限制:

IQueryable<Foo> foos = ..;
myFunc(foos.Select(x => (IFoo)x));

编辑(来自 Reed 的评论,如下):

IQueryable<Foo> foos = ..;
myFunc(foos.Cast<IFoo>());

关于c# - 如果对象实现了该接口(interface),我可以将 IQueryable<Foo> 传递给 IQueryable<IFoo> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940644/

相关文章:

c# - 使用 LINQ 将 List<U> 转换为 List<T>

c# - 如何将 Selectlist 转换为 Html.SelectListFor()

c# - XNA 顶点法线计算不适用于立方体

.net - 如何将 .NET 3.5 和 .NET 4.0 程序集添加到 FxCop 代码分析?

c# - 用 C# 属性替换 XML 注释的正则表达式

winforms - Compact Framework 3.5 设置表单父级

c# - Directory.GetFiles 不返回任何文件......有时

c# - 如何以编程方式从远程共享点服务器 checkout 文档 (c#)

c# - 如何将 .Net Framework 从 3.5 版更改为 4.0 版

c# - 如何解析这个? ftpWebRequest ListDirectorDetials