为LINQ服务的C#新特性总结篇---扩展方法,匿名委托,lambda表达式,Action委托,Func委托,Linq中的order by,top和sum函数

简介: Codeusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;namespace ConsoleApplication1{    stat...
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Diagnostics;

namespace ConsoleApplication1
{
    
static class Program
    {
        
static void Main(string[] args)
        {
            
//Predicate
            
//把方法当作参数传递
            DisplayProcess(Filter);
            
//匿名委托
            DisplayProcess(delegate(Process process) { return process.WorkingSet64 >= 20 * 1024 * 1024; });
            
//lambda表达式
            DisplayProcess(process =>  process.WorkingSet64 >= 20 * 1024 * 1024);


            
//action
            Action<string> print_string = (s) =>  Console.WriteLine(s);
            print_string.Invoke(
"就这么简单!");
            
//Func
            Func<DateTime> get_time = () => DateTime.Now;
            DateTime now 
= get_time.Invoke();
            print_string.Invoke(now.ToString());
            
//扩展方法
            List<int> int_list = new List<int> { 1234567 };
            
int b= int_list.list_sum();
            print_string.Invoke(b.ToString());
            
//sql中的top和order by
            var c = int_list.OrderByDescending(i => i).Take(3);
            
foreach (int k in c)
            {
                print_string.Invoke(k.ToString());
            }
            var d 
= int_list.OrderByDescending(i => i).Take(3).Sum();
            print_string.Invoke(d.ToString());

            Console.ReadKey();
        }
        
/// <summary>
        
/// 扩展方法必须在非泛型静态类中定义
        
/// </summary>
        
/// <param name="list"></param>
        
/// <returns></returns>
        static int list_sum(this IEnumerable<int> list)
        {
            
int a = 0;
            
foreach (var i in list)
            {
                a 
+= i;
            }
            
return a;
        }
        
/// <summary>
        
/// Predicate<Process>是泛型委托
        
/// 定义如下public delegate bool Predicate<T>(T obj);
        
/// </summary>
        
/// <param name="match"></param>
        private static void DisplayProcess(Predicate<Process> match)
        {
            
foreach(var process in Process.GetProcesses())
            {
                
if (match(process))
                {
                    Console.WriteLine(
"{0}            {1}", process.ProcessName, process.WorkingSet64);
                }
            }
            
        }
        
private static bool Filter(Process process)
        {
            
return process.WorkingSet64 >= 20 * 1024 * 1024;
        }
    }
}

目录
相关文章
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
3月前
|
编译器 C# 开发者
C# 9.0中的顶级语句:简化程序入口的新特性
【1月更文挑战第13天】本文介绍了C# 9.0中引入的顶级语句(Top-level statements)特性,该特性允许开发者在不使用传统的类和方法结构的情况下编写简洁的程序入口代码。文章详细阐述了顶级语句的语法、使用场景以及与传统程序结构的区别,并通过示例代码展示了其在实际应用中的便捷性。
|
1月前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式
|
3月前
|
开发框架 .NET 编译器
C# 9.0中的目标类型新表达式:类型推断的又一进步
【1月更文挑战第16天】C# 9.0引入了目标类型新表达式,这是类型推断功能的一个重要扩展。通过目标类型新表达式,开发者在创建对象时可以省略类型名称,编译器会根据上下文自动推断所需类型。这一特性不仅简化了代码编写,还提高了代码的可读性和维护性。本文将详细介绍目标类型新表达式的语法、使用场景及其对C#编程的影响。
|
3月前
|
开发框架 .NET Java
ASP.NET Core高级编程--C#基本特性(一)
本文章简略介绍C#的部分特性
|
3月前
|
机器学习/深度学习 开发框架 .NET
C# 中的 Lambda 表达式:一种简洁而强大的编程工具
【1月更文挑战第6天】在现代编程中,Lambda 表达式已经成为一种非常流行的编程范式。C# 作为一种功能强大的、面向对象的编程语言,自然也不例外。Lambda 表达式在 C# 中提供了一种简洁、灵活的方式来表示匿名函数。这些函数可以被用作委托或表达式树类型,从而在各种不同的上下文中使用。
|
3月前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之投影
本篇文章我们将演示LINQ扩展包语法里的投影特性,用投影实现LINQ结果集的类型转换。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
25 0
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
18 0