我有一个实现IEnumerable的类,但没有实现IEnumerable<T>.我不能改变这个类,也不能用另一个类来代替它.正如我从MSDN LINQ can be used if class implements IEnumerable<T>中了解到的.我try 过使用instance.ToQueryable(),但它仍然无法启用LINQ方法.我确信这个类只能包含一种类型的实例,所以这个类可以实现IEnumerable<T>,但它不能实现.那么我该如何使用LINQ表达式查询这个类呢?

推荐答案

可以使用Cast<T>()OfType<T>获得完全支持LINQ的IEnumerable的通用版本.

例如.

IEnumerable objects = ...;
IEnumerable<string> strings = objects.Cast<string>();

或者,如果你不知道它包含什么类型,你可以:

IEnumerable<object> e = objects.Cast<object>();

如果你的非泛型IEnumerable包含各种类型的对象,而你只对字符串感兴趣,你可以:

IEnumerable<string> strings = objects.OfType<string>();

.net相关问答推荐

PowerShell 5.1和7在使用证书时的区别

在 Invoke() 中运行时,跨线程操作对表单控件无效 - .NET

Npgsql Minimum Pool Size 似乎没有被考虑在内

使用 PEM 文件创建 DSA 签名

无法通过构建目标访问 dotnet 的环境变量

我应该创建一个 DateRange 对象吗?

如何获取控制台应用程序的执行目录

JavaScript 中的IsNullOrWhitespace?

使用返回随机结果的函数进行单元测试

简单委托(委托)与多播委托

无法加载文件或程序集WebGrease,版本=1.5.1.25624,Culture=neutral,PublicKeyToken=31bf3856ad364e35或其依赖项之一

我应该从 .NET 中的 Exception 或 ApplicationException 派生自定义异常吗?

C# 中 try/finally 的开销?

将双精度转换为带有 N 个小数的字符串,点作为小数分隔符,并且没有千位分隔符

隐式与显式接口实现

如何在多个解决方案之间共享相同的 Resharper 设置,无需人工干预?

为什么 C# 不推断我的泛型类型?

使用+运算符的字符串连接

如何将 Excel 序列日期编号转换为 .NET DateTime?

没有科学记数法的双精度字符串转换