C# 理解委托和委托语法
我有这行代码,它可以工作,但我不理解:C# 理解委托和委托语法,c#,delegates,C#,Delegates,我有这行代码,它可以工作,但我不理解: Genres.Find(delegate (Genre genre) { return genre.Id == id; }); 流派是流派(音乐)的列表 这里到底发生了什么?C#提供了两种定义委托的方法,而无需为委托编写命名方法——C#2.0中引入的旧语法和C#3.0中引入的较短的lambda语法 您的代码采用了旧的编写方式: Genres.Find(genre => genre.Id == id); 这描述了C#中匿名函数的演变 您的Find方
Genres.Find(delegate (Genre genre) { return genre.Id == id; });
流派是流派(音乐)的列表
这里到底发生了什么?C#提供了两种定义委托的方法,而无需为委托编写命名方法——C#2.0中引入的旧语法和C#3.0中引入的较短的lambda语法
您的代码采用了旧的编写方式:
Genres.Find(genre => genre.Id == id);
这描述了C#中匿名函数的演变
您的Find
方法接受谓词委托。根据代码所针对的.NET版本,它可能是代理,也可能不是代理,但其功能是等效的。括号中的匿名方法提供了谓词的实现,允许您将任意条件传递给Find(…)
方法。C#提供了两种定义委托的方法,而无需为委托编写命名方法—C#2.0中引入的旧语法和C#3.0中引入的较短lambda语法
您的代码采用了旧的编写方式:
Genres.Find(genre => genre.Id == id);
这描述了C#中匿名函数的演变
您的
Find
方法接受谓词委托。根据代码所针对的.NET版本,它可能是代理,也可能不是代理,但其功能是等效的。括号中的匿名方法提供了谓词的实现,允许您将任意条件传递给Find(…)
方法。可能我在这里没有使用正确的术语。但是从抽象的角度来看:Find方法在这里接受委托作为参数。它允许您实现“查找”算法(这里比较id)。这是一个灵活的代码,您还可以比较“流派”的任何其他对象。也许我在这里没有使用正确的术语。但是从抽象的角度来看:Find方法在这里接受委托作为参数。它允许您实现“查找”算法(这里比较id)。这是一种灵活的代码,您还可以比较“流派”的任何其他对象。以直观的方式查看:
Genres.Find( --- The CompareGenres function is being called from here --- );
bool CompareGenres(Genre genre)
{
return genre.Id == id;
}
Find接受一个谓词因此,您只是以委托的形式将方法作为参数传递,这是一种直观的方式:
Genres.Find( --- The CompareGenres function is being called from here --- );
bool CompareGenres(Genre genre)
{
return genre.Id == id;
}
Find接受一个谓词Genres
),它的Id等于变量Id
中的值
关键字delegate
表示,这是一种内联函数,用于决定每个项目的检查是否为真。开头的(Genre-Genre)
表示“如果我调用循环中的每个元素Genre
,我可以使用其命名变量Id
检查每个项目的Id”。这是:genre.Id==Id
现代方法是使用lambdas,如:
var x = Genres.Find(g => g.Id == id);
在本例中,g
是您可以检查的循环变量。它说,从列表Genres
中找到Id等于变量Id
中值的类型
关键字delegate
表示,这是一种内联函数,用于决定每个项目的检查是否为真。开头的(Genre-Genre)
表示“如果我调用循环中的每个元素Genre
,我可以使用其命名变量Id
检查每个项目的Id”。这是:genre.Id==Id
现代方法是使用lambdas,如:
var x = Genres.Find(g => g.Id == id);
在本例中,
g
是您可以检查的循环变量。问题是什么?它是如何工作的!你知道lamda的表达方式吗?旁注:解释你已经理解的将有助于你提供解释你感兴趣的答案,不是你可能知道也可能不知道的随机片段。代表们的最佳参考是Jon Skeet的C#depth。它确实很有帮助。但在开始阅读之前,你应该了解一些delagets,问题是什么?它是如何工作的!你知道lamda的表达方式吗?旁注:解释你已经理解的将有助于你提供解释你感兴趣的答案,不是你可能知道也可能不知道的随机片段。代表们的最佳参考是Jon Skeet的C#depth。它可能非常有用。但在开始阅读之前,你应该了解一些delagets