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

复制代码
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;
        }
    }
}

复制代码
posted @   liulun  阅读(1193)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示