_ =>这在Lambdaexpression式中意味着什么?

_=> expr这样的lambdaexpression式是什么意思?

_作为lambdainput的目的是什么?

例:

 int sum = 0; list.ForEach(_=> { sum += 1; }); 

当你不关心参数时,这是一个惯例。

这是一个参数名称,虽然不是一个有用的名称,但是当你需要指定expression式一个参数来获得编译代码的时候,它是一个典型的使用方法(但是一些约定),但是你并不在乎关于它,所以你只是要忽略它。

它基本上是利用C#中合法标识符的语法来构成的,由于标识符可以以下划线开始,并且不包含任何其他内容,所以它只是一个参数名称。

你可以很容易地写:

 var _ = 10; 

_是一个有效的variables名称。 他们只是使用_作为一个variables。

因为lamdaexpression式主要用在一个简短的匿名代码中,所以variables的名字有时并不需要,即使它们不使用代码块中的variables,所以他们只给出一个短的约定

我还使用了_ => _.method()方法调用lambdaexpression式,因为它减less了指令的认知权重。 特别是在使用generics时,写入x => x.method()只是增加了“这是什么x”的x => x.method()考虑?它是空间坐标吗?

考虑以下情况:

Initialize<Client> ( _=>_.Init() );

与generics调用一起使用,在这种情况下,下划线用作“旁路符号”。 它避免冗余,定义参数的types是显而易见的,并且可以从使用中获得 – 就像当您使用“var”来防止重复types声明一样。 写client=>client.Init()这里只会使指令更长,而不会增加任何意义。

显然,这不适用于要传递给方法的参数,应该对其进行描述性的指定。 例如: Do( id=>Log(id) );

方法调用的单下划线参数用法在使用代码块而不是单线时是不合理的,因为lambda标识符从其generics定义中断开。 一般情况下,如果要重复使用相同的标识符,请给它一个描述性名称。

底线是冗长只适用于消除歧义,特别是对于创build简化匿名代理创build的lambda。 无论如何,应该使用常识,平衡可读性和简洁性。 如果符号只是一个“钩子”的实际function,一个字符标识符是完全正确的。 For循环和“i”和“j”字母作为索引器就是这种情况。