Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# “我怎么发音?”=&燃气轮机&引用;在.Net中的lambda表达式中使用_C#_.net_Lambda_Conventions - Fatal编程技术网

C# “我怎么发音?”=&燃气轮机&引用;在.Net中的lambda表达式中使用

C# “我怎么发音?”=&燃气轮机&引用;在.Net中的lambda表达式中使用,c#,.net,lambda,conventions,C#,.net,Lambda,Conventions,我很少见到其他程序员 当我第一次看到这个标记时,我的想法是“暗示”,因为这是它在数学证明中所理解的,但这显然不是它的意义 那么我如何说或读“=>”,如:- IEnumerable成人=人。其中(p=>p.年龄>16岁) 或者甚至有一种约定的表达方式吗?我在阅读该操作符时通常会说“这样” 在您的示例中,p=>p.Age>16读作“p,因此p.Age大于16” 事实上,我在linq发布前的官方论坛上问了这个问题,Anders Hejlsberg回答说 我通常将=>运算符理解为“been”或“for

我很少见到其他程序员

当我第一次看到这个标记时,我的想法是“暗示”,因为这是它在数学证明中所理解的,但这显然不是它的意义

那么我如何说或读“=>”,如:-

IEnumerable成人=人。其中(p=>p.年龄>16岁)

或者甚至有一种约定的表达方式吗?

我在阅读该操作符时通常会说“这样”

在您的示例中,p=>p.Age>16读作“p,因此p.Age大于16”

事实上,我在linq发布前的官方论坛上问了这个问题,Anders Hejlsberg回答说

我通常将=>运算符理解为“been”或“for which”。例如,
Func f=x=>x*2
Func test=c=>c.City==“伦敦”
读作“x变成x*2”和“c,其中c.城市等于伦敦”

至于“去”,这对我来说从来没有意义p'哪儿也去不了

在通过电话向某人读代码的情况下,只要他们是C#程序员,我就用“lambda”这个词——也就是说,“p lambda p dot age大于16。”

在评论中,Steve Jessop提到了转换中的“映射到”-以Anders为例:

x => x * 2;
会读

x映射到x乘以2

这似乎比本例中的“变成”更接近代码的实际意图。

来自Eric Lippert:

我个人会说c=>c+1是“看去看加一”。我听到的一些变化:

对于投影,(客户c)=>c.Name:“客户看到变成了看到点名称”


对于一个谓词,(Customer c)=>c.Age>21:“Customer see使得see dot Age大于21”

我看到有人说,“Arrow”。

我使用“goes to”,因为LINQ的书告诉我:)

部分问题是,你可以根据它的结构不同大声读出它。遗憾的是,它没有ruby的|那么漂亮,也没有ruby的|那么集成。

除了获取前面的作用域之外(在lambda表达式出现的点上,正常代码行范围内的所有变量和常量都可用于表达式的代码)lambda表达式本质上是内联函数的语法糖

生产运算符(“=>”)左侧的值列表提供用于调用此函数的堆栈帧的结构和内容。可以说,值列表提供了参数声明和传递的参数;在更传统的代码中,它们确定用于调用函数的堆栈帧的结构和内容

结果,这些值“转到”表达式代码。您更愿意说“定义堆栈帧”还是“转到”?:)

在用作过滤条件的布尔表达式的狭义定义应用中(该问题的其他答案广泛考虑的lambda表达式的主要用途),为了代码的目的而跳过该方法是非常合理的,这会导致“for which”同样简洁,并更多地说明代码的含义

然而,lambda表达式并不是Linq的唯一领域,在此上下文之外,应该使用更一般的形式“goes to”


但为什么“去”? 因为“填充以下代码的堆栈框架”太长,不能一直这么说。我想你可以说“是/是传递给”


显式传递的参数和捕获的变量(如果我没记错,请纠正我的错误)之间的一个关键区别是前者是通过引用传递的,后者是通过值传递的。

我没有考虑太多,但我只是简单地说“to”。它简短明了,意味着变量被传递给表达式。我想它可能会与数字2(“两”)混淆,但我说话时倾向于发“to”更像“ta”。没有人(至少谁知道兰博达斯)告诉过我,他们认为这是模棱两可的

// "Func f equals x to x times two"
Func f = x=> x * 2;

// "Func test equals c to c dot City equals London"
Func test = c => c.City == "London"
发件人:

所有lambda表达式都使用lambda 运算符=>,读作“goes” 至”

我的简短回答是:“c’lambda of’e”。虽然我坚持使用“lambda'c'函数'e”,但我认为lambda是一种普世的妥协。分析如下

这是一个很好的问题,如果只是因为奇怪的答案。大多数翻译都有其他意义,而不是lambda表达,导致异国情调的解释。作为一个老的lambda表达式黑客,我只是忽略了.NET符号,在我的脑海中把它改写成lambda,同时希望他们为此做了几乎任何其他的事情


对于通过电话讲述代码,您希望有人能够按顺序写下代码。这当然是一个问题,但lambda arrow或其他东西可能是你能得到的最好的,或者可能是lambda in,但lambda of是最准确的

问题在于中缀的用法,以及如何用中缀的位置来命名整个事物以及左右部分的角色

这可能是一个过度约束的问题


我不会使用“这样那样”,因为这意味着右侧是左侧应该满足的谓词。这与讨论右手边非常不同,左手边被抽象为一个函数参数。(MSDN关于“所有lambda表达式”的声明既无礼又不准确。)

虽然“去”可能是我们能得到的最接近的,但它让人恼火。“Goes to”意味着一个转换,但实际上并没有某个变量c指向c中的表达式。对函数的抽象有点难以捉摸。我可以习惯于这样,但我仍然渴望一些强调变量抽象的东西

从那以后
// "Func f equals x to x times two"
Func f = x=> x * 2;

// "Func test equals c to c dot City equals London"
Func test = c => c.City == "London"
(n => n == String.Empty)
s => s.Age > 12 && s.Age < 20
delegate(Student s) { return s.Age > 12 && s.Age < 20; };
'result = s => s.Age > 12 && s.Age < 20'
'result = x => x * 2'
'result = c => c.City == "London"'
'result = n => n == String.Empty'