Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C上下文中的Lambda函数与OOP_C#_Oop_Lambda - Fatal编程技术网

C# C上下文中的Lambda函数与OOP

C# C上下文中的Lambda函数与OOP,c#,oop,lambda,C#,Oop,Lambda,我是c语言的初学者,对通过深入学习来学习这门语言非常感兴趣。最近使用Lambda函数制作了一段代码,但不知道它是如何工作的 我通过编写硬代码从列表中映射值。见下文: var validRatings = new List<int> { 1, 2, 3, 4, 5 }; 我知道Lambda函数是匿名的,但它们与常规函数有何不同?它们如何适应C中的OOP上下文?在代码中任何时候都可以按名称调用普通方法,但在某些情况下,我们需要一些只执行一次的代码块,或者调用方只有一个,因此,如果您在上

我是c语言的初学者,对通过深入学习来学习这门语言非常感兴趣。最近使用Lambda函数制作了一段代码,但不知道它是如何工作的

我通过编写硬代码从列表中映射值。见下文:

var validRatings = new List<int> { 1, 2, 3, 4, 5 };

我知道Lambda函数是匿名的,但它们与常规函数有何不同?它们如何适应C中的OOP上下文?

在代码中任何时候都可以按名称调用普通方法,但在某些情况下,我们需要一些只执行一次的代码块,或者调用方只有一个,因此,如果您在上面的代码中看到

lambda表达式的主要目的是为调用代码提供灵活性,以传递其自身的实现,例如,在上述情况下,您可以指定自己的实现,并将我的原始集合投影到包含一个名为fundRating的属性的新集合,这种情况下,您可能只需要这段代码,因此lambda表达式创建的匿名方法只能由Select方法实现调用


希望有帮助

您可以创建一个函数并将其命名,如下所示:

private string getFundRating(GrossAlpha ga)
{
    return ga.fundRating;
}
然后您可以在Select中传递该函数。像这样:

var validRatings = settings.grossAlphas.Select(getFundRating).ToList();
这是一个不使用lambda的示例。在这种情况下,您使用的是命名函数。您可以在代码或其他linq语句中的其他地方使用相同的函数

在您提供的示例中,您可以动态创建一个函数,甚至不命名它并将其传递到Select中

注意:我假设您有一个名为GrossAlpha的对象,settings.GrossAlpha会返回这些对象的列表


关于你问题的另一部分。它们如何适应OOP的环境,我无法比Eric Lippert解释得更好。

一个简单的匿名方法,尽管不是一个纯粹的定义,是一个你想使用一次并继续使用的方法。它们被称为匿名,因为它们不是命名方法。在C语言中,Lambdas是一种非常强大的方式,可以根据您的单个对象链接常用的方法

您的代码正在做什么,在一行中,将需要许多行来根据您的每个类编写出独特的方法

要逐个分解代码所做的工作,请执行以下操作:

var validRatings = settings.grossAlphas.Select(ga => ga.fundRating).ToList();
选择…:正在浏览您的枚举列表、数组等。。。对象,并根据在中提供的参数聚合它们。选择

ga=>ga.fundRating:您是说您只想聚集每个对象的fundRating属性

.托利斯特:正在将您的枚举列成一个列表

这样,您就不用在需要使用FundRatings列表的时候编写GetFundRatings列表

另见:

Lambda函数是匿名函数,但它们与常规函数有何不同

X和Y有什么不同?对于StackOverflow来说,这通常不是一个好问题。这里,这里有一棵苹果树和一棵橡树;它们有何不同?很难说

简而言之:

lambda可以转换为委托树或表达式树。常规函数只能转换为委托

lambda可以是表达式体或语句体。在C 6之前,正则函数只能是语句体

lambda可以从上下文推断其形式参数类型;常规函数不能

它们如何适应C中的OOP环境

他们没有。lambda是函数式编程的思想,而不是面向对象编程的思想。OOP的基本思想是功能与数据逻辑连接;lambda与此正好相反。lambda是关于函数与数据对象的解耦


如果这不能回答你的问题,那么问一个更清楚的问题。oop上下文是什么意思?

它们如何适应面向对象上下文是什么意思?lambda是一种表达形式。你需要研究林克。也就是说,这不是一个教程网站;除非你展示了相关代码的实际问题,否则你不会得到太多帮助。好吧,匿名函数只是在你不需要并且不想摆脱所有其他东西并留下对你来说最重要的东西时才有用。lambda来自函数式编程。C是OOP和函数式编程概念的混合体。你可以很容易地看到它们的不同之处,它们不是在对象上定义的。如果Lambda在函数和面向对象中的工作方式不同,这有助于我现在理解这个概念。非常感谢!!
var validRatings = settings.grossAlphas.Select(ga => ga.fundRating).ToList();