首页 > 编程语言 >C#的Action和Func委托

C#的Action和Func委托

时间:2024-08-20 11:49:22浏览次数:11  
标签:myAction Console WriteLine C# Func Action public string

Action委托:

1.声明和使用不带参数的 Action 委托:

Action myAction = () => Console.WriteLine("Hello World!");
myAction();

2.声明和使用带有一个参数的 Action 委托:

Action<string> myAction = (message) => Console.WriteLine(message);
myAction("Hello World!");

3.声明和使用带有两个参数的 Action 委托:

Action<string, int> myAction = (message, number) => Console.WriteLine($"{message} {number}");
myAction("Hello", 123);

4.使用匿名方法创建 Action 委托:

Action myAction = delegate() { Console.WriteLine("Hello World!"); };
myAction();

5.使用 lambda 表达式创建 Action 委托:

Action myAction = () => Console.WriteLine("Hello World!");
myAction();

6.将方法作为 Action 委托的参数:

public void DisplayMessage(string message)
{
    Console.WriteLine(message);
}
 
Action myAction = DisplayMessage;
myAction("Hello World!");

7.将实例方法作为 Action 委托的参数:

public class MyClass
{
    public void DisplayMessage(string message)
    {
        Console.WriteLine(message);
    }
}
 
MyClass myClass = new MyClass();
Action myAction = myClass.DisplayMessage;
myAction("Hello World!");

Func委托:

1.使用Func<T, TResult>委托调用一个方法:

public class Program
{
    public static void Main(string[] args)
    {
        Func<int, string> func = IntToString;
        string result = func(123);
        Console.WriteLine(result);  // 输出: 123
    }
 
    public static string IntToString(int number)
    {
        return number.ToString();
    }
}

2.使用Func<T, TResult>委托在LINQ查询中:

public class Program
{
    public static void Main(string[] args)
    {
        string[] names = { "Tom", "Dick", "Harry" };
        Func<string, bool> nameFilter = name => name.Length > 4;
        var longNames = names.Where(nameFilter).ToList();
        longNames.ForEach(name => Console.WriteLine(name));  // 输出: Harry
    }
}

3.使用Func<T, TResult>委托在Array.Sort中指定排序方法:

public class Program
{
    public static void Main(string[] args)
    {
        Person[] people = { new Person { Name = "Tom", Age = 30 }, new Person { Name = "Dick", Age = 25 }, new Person { Name = "Harry", Age = 35 } };
        Array.Sort(people, (p1, p2) => p1.Name.CompareTo(p2.Name));
 
        foreach (var person in people)
        {
            Console.WriteLine($"{person.Name} - {person.Age}");
        }
    }
}
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

 

标签:myAction,Console,WriteLine,C#,Func,Action,public,string
From: https://www.cnblogs.com/Fpack/p/18369187

相关文章

  • 【WCH蓝牙系列芯片】-基于CH582开发板—蓝牙从机HAL_SLEEP模式,串口唤醒收发数据
    -------------------------------------------------------------------------------------------------------------------------------------在之前的博客文档中介绍过CH582作为蓝牙主机,开启睡眠后,通过串口唤醒,并接收串口数据。这里再讲解一下使用CH582芯片作为蓝牙从机,开......
  • vCenter通过修改主机配置文件来重置ESXi主机root密码
    背景:管理员一般通过vCenter来管理ESXi主机,时间长了,ESXi主机的root密码忘记了,本文主要介绍在vCenter中通过修改主机配置文件来修改ESXI主机的root密码,不用重启ESXI主机。1、提取主机配置文件选中要操作的主机,右键选择“主机配置文件”>>点击“提取主机配置文件”。为方便标识,更改......
  • C++类型推导
    C++11引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便地获取复杂的类型,还能简化书写,提高编码效率。1.auto类型推导1.1auto关键字的新意义在go语言中,在方法范围中声明的变量可以具有类型推导,例如:vari=10;//在go中自动类型推导变量i为int型而C++11......
  • openEuler安装Docker和踩坑分析
    去年12月8日,CentOS开发团队在其官博宣布,CentOS8将在2021年12月31日结束支持,CentOS7会按照计划维护至生命周期结束即2024年6月30日,接下来接下来将重点建设CentOSStream。免费的RedHat没有了,但生活还得继续。接下来我的目光转向openEuler,openEuler是一个开......
  • Docker 入门教程
    本文是官方GettingStarts教程的阅读笔记,包含对步骤、命令的记录和解释。教程分一系列课程,包括有:安装Docker运行容器和创建自定义容器创建高效可复用的镜像,并推送到DockerHub上GetDockerDesktopDockerDesktop是简单易用的Docker工具软件,使用DockerDesktop可......
  • Docker 入门文档阅读笔记
    Docker的架构图片来自Docker官网教程Docker采用CS架构,可以通过CLI和API与Dockerdaemon进行交互。DockerObjectsImages(镜像)Animageisaread-onlytemplatewithinstructionsforcreatingaDockercontainer.Often,animageisbasedonanotherima......
  • C++第十一弹 -- STL之List的剖析与使用
    文章索引前言1.list的介绍2list的使用2.1list的构造函数2.2iterator的使用2.3listcapacity2.4listelementaccess2.5listmodifiers3.list的迭代器失效4.list与vector的对比总结前言本篇我们旨在探讨对于STL中list的使用,下一篇我们将会对list进行底层......
  • Docker概述
    DockerⅠ容器介绍1.什么是容器容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。让我们来看看集装箱的好处:·集装箱之间相互隔离·长期反复使用·快速装载和卸载·规格标准,在港口和船上都可以......
  • ABC367
    Alink先判断一下时间是否跨天,如果跨天了,把后一个加上\(24\),使后一个大于前一个,再判断国王喊的时间或喊的时间加\(24\)是否在范围内。神奇的代码#include<bits/stdc++.h>usingnamespacestd;signedmain(){ inta,b,c; cin>>a>>b>>c; if(b>c)c+=24; ......
  • Oracle RAC 集群启动顺序 转发:https://www.modb.pro/db/1824295923545612288?utm_s
    前言前几天使用脚本在RockyLinux9.4安装Oracle11GR2RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为RHEL9版本默认安装移除了 initscripts 软件包,需要人为手动安装,在RHEL8之前是默认安装的。在分析问题的过程中,顺便对OracleRAC集群启动顺序进行了更......