Rx.Net 第三章 linq介绍

c#于2002年作为一种面向对象的语言被引入。从那以后,c#收集了其他语言的特性和风格,成为一种多范式语言。

函数式编程风格旨在创建简短易读的声明式简洁代码。

使用c#采用的声明式编程风格、一等函数和简洁编码等技术可以提高您的工作效率。

在c#中,您使用委托来提供一级和高阶函数。

可重用的Action和Func类型帮助您将函数表示为参数。

匿名方法和lambda表达式使得使用这些方法并将代码作为参数发送变得很容易。

在c#中,您使用方法链技术来构建特定于领域的语言(dsl)来表达您所编程的领域。

扩展方法使您在无法访问类型源代码或不想修改其代码时可以轻松地向类型添加功能。

要完成方法链接,使用流畅的接口和扩展方法。

LINQ使查询集合变得超级简单,它的抽象允许对不同的底层存储库执行相同的查询。

您可以使用LINQ进行过滤集合的简单查询,以及涉及将两个集合连接在一起的更复杂的查询。

匿名类型简化了查询,因为它提供了类型的内联创建,您可以使用这些类型来存储查询结果,这些结果应该只在一个范围内可见。

延迟执行允许您创建在使用查询结果时执行的查询,而不是在创建查询时执行。

下一章将讨论创建Rx查询的第一部分,以及创建每个Rx查询所依赖的可观察对象的基础知识

csharp 复制代码
void TestDelegate()
{
    string[] cities = new[] { "London", "Madrid", "TelAviv" };
    string[] friends = new[] { "Minnie", "Goofey", "MickeyM" };
    Console.WriteLine("Are friends and cities similar? {0}", AreSimilar(friends, cities, (f1, f2) => f1.Length == f2.Length));

    //IComparer 比价
    var words = new List<string> { "ab", "a", "aabb", "abc" };
    words.Sort(Comparer<string>.Create(new Comparison<string>((x, y) =>
    {
        if (x.Length == y.Length)
        {
            return 0;
        }
        if (x.Length > y.Length)
        {
            return 1;
        }
        else
        {
            return -1;
        }

    })));
    Console.WriteLine(string.Join(", ", words));

    //延迟加载
    var p = new People();
    var h = p.GetHealthState();
    Console.WriteLine($"健康状态:{JsonSerializer.Serialize(h)}");

    //linq链接查询
    var authors = new[] {
                       new Author(1, "Tamir Dresher"),
                       new Author(2, "John Skeet")

};
    var books = new[] {
                    new Book("Rx.NET in Action", 1),
                    new Book("C# in Depth", 2),
                    new Book("Real-World Functional Programming", 2)
};

    var authorsBooks = authors.Join(books, a => a.Id, b => b.AuthorId, (a, b) => $"{a.Name} wrote the book: {b.BookName}");
    Console.WriteLine(JsonSerializer.Serialize(authorsBooks));
   
}
相关推荐
淡海水11 小时前
01-05-运行时-JIT优化全景-内联去虚拟化边界检查消除
windows·c#·虚拟化·jit·内联·边界检查消除
波波00719 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
wujian83111 天前
怎么用千问生成word文档:从「格式崩」到「一键过」,AI导出鸭打通最后半厘米
人工智能·ai·c#·word·豆包·deepseek·ai导出鸭
zlinear数据采集卡1 天前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
唐青枫1 天前
别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
c#·.net
zlinear数据采集卡1 天前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
花落人散处1 天前
CDiskClean 开发历程 —— 文件清理_目录树解析实现方案参考
c#
离陌在学C#1 天前
C# 泛型:从基础到高级应用
开发语言·c#
Vertira1 天前
C# 与 OpencvSharp 编程[基础目录]
c#