添加Lesson15
This commit is contained in:
@@ -61,6 +61,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数", "Le
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数练习", "Lesson14_匿名函数练习\Lesson14_匿名函数练习.csproj", "{9030BA7A-FDFA-4F88-869E-918589104831}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数练习", "Lesson14_匿名函数练习\Lesson14_匿名函数练习.csproj", "{9030BA7A-FDFA-4F88-869E-918589104831}"
|
||||||
EndProject
|
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
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
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}.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.ActiveCfg = Release|Any CPU
|
||||||
{9030BA7A-FDFA-4F88-869E-918589104831}.Release|Any CPU.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -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<int> a2 = (int i1) =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"有参无返回的lambda表达式 参数i1:{i1}");
|
||||||
|
};
|
||||||
|
a2(100);
|
||||||
|
|
||||||
|
//3.有参的lambda表达式,甚至参数类型都可以省略 参数类型和委托或事件容器一致
|
||||||
|
Action<int> a3 = (i1) =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"有参无返回的lambda表达式 参数i1:{i1}");
|
||||||
|
};
|
||||||
|
a3(200);
|
||||||
|
|
||||||
|
//4.有返回值的lambda表达式
|
||||||
|
Func<int, int, int> 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user