From b1d4959956c85ec01ca72c8b814867039aa96b16 Mon Sep 17 00:00:00 2001
From: Kister Hakusan <2753888203@qq.com>
Date: Mon, 20 Oct 2025 11:12:14 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Lesson15?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
C#进阶/C#进阶.sln | 12 +++
.../Lesson15_lambda表达式.csproj | 10 ++
C#进阶/Lesson15_lambad表达式/Program.cs | 97 +++++++++++++++++++
.../Lesson15_lambda表达式练习.csproj | 10 ++
C#进阶/Lesson15_lambad表达式练习/Program.cs | 50 ++++++++++
5 files changed, 179 insertions(+)
create mode 100644 C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj
create mode 100644 C#进阶/Lesson15_lambad表达式/Program.cs
create mode 100644 C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj
create mode 100644 C#进阶/Lesson15_lambad表达式练习/Program.cs
diff --git a/C#进阶/C#进阶.sln b/C#进阶/C#进阶.sln
index 0d5c747..a51d5e9 100644
--- a/C#进阶/C#进阶.sln
+++ b/C#进阶/C#进阶.sln
@@ -61,6 +61,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数", "Le
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数练习", "Lesson14_匿名函数练习\Lesson14_匿名函数练习.csproj", "{9030BA7A-FDFA-4F88-869E-918589104831}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson15_lambda表达式", "Lesson15_lambad表达式\Lesson15_lambda表达式.csproj", "{50810F24-0145-43C6-AE3E-1D99D0583AB8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson15_lambda表达式练习", "Lesson15_lambad表达式练习\Lesson15_lambda表达式练习.csproj", "{E0931580-D76C-4434-B059-149AEED828ED}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -183,6 +187,14 @@ Global
{9030BA7A-FDFA-4F88-869E-918589104831}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9030BA7A-FDFA-4F88-869E-918589104831}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9030BA7A-FDFA-4F88-869E-918589104831}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E0931580-D76C-4434-B059-149AEED828ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E0931580-D76C-4434-B059-149AEED828ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E0931580-D76C-4434-B059-149AEED828ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E0931580-D76C-4434-B059-149AEED828ED}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj b/C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/C#进阶/Lesson15_lambad表达式/Program.cs b/C#进阶/Lesson15_lambad表达式/Program.cs
new file mode 100644
index 0000000..0cc35a6
--- /dev/null
+++ b/C#进阶/Lesson15_lambad表达式/Program.cs
@@ -0,0 +1,97 @@
+namespace Lesson15_lambda表达式
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ #region 知识点一 什么时lambda表达式
+ //可以将lambda表达式理解为 匿名函数的简写
+ //它除了写法不同外
+ //使用上和匿名函数是一样的
+ //都是配合委托类型使用的
+ #endregion
+
+ #region 知识点二 lambda表达式的语法
+ //匿名函数
+ //delegate(参数列表){函数体};
+
+ //lambda表达式
+ //(参数列表)=>{函数体};
+ #endregion
+
+ #region 知识点三 使用
+ //1.无参无返回值的lambda表达式
+ Action a = () =>
+ {
+ Console.WriteLine("无参无返回的lambda表达式函数");
+ };
+ a();
+
+ //2.有参无返回值的lambda表达式
+ Action a2 = (int i1) =>
+ {
+ Console.WriteLine($"有参无返回的lambda表达式 参数i1:{i1}");
+ };
+ a2(100);
+
+ //3.有参的lambda表达式,甚至参数类型都可以省略 参数类型和委托或事件容器一致
+ Action a3 = (i1) =>
+ {
+ Console.WriteLine($"有参无返回的lambda表达式 参数i1:{i1}");
+ };
+ a3(200);
+
+ //4.有返回值的lambda表达式
+ Func f = (i1, i2) =>
+ {
+ Console.WriteLine($"有返回的lambda,将返回{i1}与{i2}相加");
+ return i1 + i2;
+ };
+ Console.WriteLine(f(10, 20));
+ #endregion
+
+ Test t = new Test();
+ t.Dosomething();
+ }
+ }
+ #region 知识点四 闭包
+ //内层的函数可以引用包含在它外层的变量
+ //即使外层函数已经执行完毕
+ //注意:
+ //该变量提供的值并不是变量创建时的值,而是在父函数范围内最后一次被修改的值
+ #endregion
+
+ class Test
+ {
+ public event Action action;
+ public Test()
+ {
+ int value = 10;
+ //这里就是一个闭包的例子
+ //因为 当构造函数执行完毕后 value变量的生命周期应该结束了
+ //但是由于action引用了value变量
+ //所以value变量的生命周期被延长了
+ action = () =>
+ {
+ Console.WriteLine($"闭包value的值为:{value}");
+ };
+ for (int i = 0; i < 10; i++)
+ {
+ int index = i;//解决闭包问题的常用方法
+ //每次都是新创建的index变量,所以可以保存当时的值
+ //但是i是在循环里的,所以每次循环都是同一个i变量,所以最终闭包引用的i变量的值就是循环结束时的值10
+ action += () =>
+ {
+ Console.WriteLine($"闭包循环i的值为:{i}");
+ Console.WriteLine($"闭包循环index的值为:{index}");
+ };
+
+ }
+ }
+
+ public void Dosomething()
+ {
+ action();
+ }
+ }
+}
diff --git a/C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj b/C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/C#进阶/Lesson15_lambad表达式练习/Program.cs b/C#进阶/Lesson15_lambad表达式练习/Program.cs
new file mode 100644
index 0000000..fbcdfa7
--- /dev/null
+++ b/C#进阶/Lesson15_lambad表达式练习/Program.cs
@@ -0,0 +1,50 @@
+namespace Lesson15_lambda表达式练习
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ a1()();
+ a2()();
+ }
+
+ public static Action a1()
+ {
+ Action action = null;
+ for (int i = 1; i <= 10; i++)
+ {
+ int index = i;
+ action += delegate()
+ {
+ Console.WriteLine(index);
+ };
+ }
+ return action;
+ }
+ public static Action a2()
+ {
+ Action action = null;
+ for (int i = 1; i <= 10; i++)
+ {
+ int index = i;
+ action += () => Show(index);
+ }
+ return action;
+ }
+ public static Action a3()
+ {
+ Action action = null;
+ for (int i = 1; i <= 10; i++)
+ {
+ int index = i;
+ action += () => Show(index);
+ }
+ return action;
+ }
+ static void Show(int x)
+ {
+ Console.WriteLine(x);
+ }
+ }
+
+}