c# - IObservable<T> 使用 linq 查询

标签 c# .net linq system.reactive

为什么是IObservable<T>不是 IEnumerable<T> 的实现和 IQueryable<T> ,但我可以使用 LINQ 查询吗?是IObservable特殊类型 ?

我以前认为只有 Linq 查询 IEnumerable 或 IQueryable ,但事实并非如此。以下代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Rx_Test1
{
    public static class IMyClassExtension
    {

        public static MyClass<TResult> Select<TSource, TResult>(this MyClass<TSource> source, Func<TSource, int, TResult> selector)
        {
            return null;
        }

        public static MyClass<TResult> Select<TSource, TResult>(this MyClass<TSource> source, Func<TSource, TResult> selector)
        {
            return null;
        }

    }
    public class MyClass<T>
    {

    }
    class Program
    {
        static void Main(string[] args)
        {
            var myclass = new MyClass<int>();
            var q = from m in myclass 
                    select m;
        }
    }
}

最佳答案

LINQ 查询理解适用于任何实现相应 Select/Where/etc 的东西。编译器可以转换成的方法。它不限于特定的接口(interface)。这类似于您如何对未实现 IEnumerable 但包含 GetEnumerator 和 MoveNext/Current 方法的对象进行 foreach。实际上,LINQ 表达式是由编译器 duck 类型化的。这也解释了为什么您可以在 IObservable 上使用一些 LINQ 表达式而不是全部(有意排除 orderby)。

关于c# - IObservable<T> 使用 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938527/

相关文章:

c# - 如何将 ContextMenuStrip 添加到 ToolStripButton?

c# - 在 ComboBox 中显示颜色列表 - 拾色器

linq - Azure 移动服务中的计数

.net - 您更喜欢 .net 中的哪种配置方法?为什么?

c# - 在 WPF 中同步 ViewModel

c# - 使用 LINQ-to-Entities 搜索时忽略空字符串

c# - 为什么我不能在 ASP.NET 中使用 LINQ?

c# - 对 ASP.NET 身份框架和 EF 代码优先的持久性无知

c# - 存储用于 SQL 和 C# 的常量

c# - 任务并行库的 Resharper false 可能出现 nullReferenceException 警告