我用在其他语言lambda表达式在C#中使用它们之前,所以我使用的习惯了_
的形式用于简单的lambda Func<T, TResult>,
尤其是对于简单的lambda其中本体仅仅是一个表达表示的返回值(谓词,等等。)。 然而,在C#常常看到正在使用的单字母代替_
这些同样类型lambda表达式,如x,y,z,i,j,k
。 这封信的做法似乎有些奇怪我,因为这些信件已经在普遍使用的另一种典型意义,对循环变量。 _
往往更容易阅读在我看来。 是单字母风格真的在C#lambda表达式建立的风格?
例子:
我已经习惯了写:
var ages = people.Select(_ => _.Age);
我所看到的,而不是被写入:
var ages = people.Select(x => x.Age); // choice of 'x' is not consistent
许多C#开发人员使用_
指示该参数不打算使用, 目前正在使用的参数时,字母或其他短名称。
其他资源:
这是一个变量名,所以我与它需要传达的名字应该传达信息的思路走。 什么信息_
传达?
为了同样的目的,做了什么信息x
传达?
我可以写你的例子是这样的:
var ages = people.Select(p => p.Age);
我们的想法是,我觉得p
至少在整个声明中,这是一个背景下提出 people
的纪录。 你可以把它更进一步:
var ages = people.Select(person => person.Age);
现在,传达给读者什么变量实际上是。 当然,对于这么小的说法,一种说法可以由它的矫枉过正。 我不这么认为,但它是偏好的问题。 (而且不只是你的喜好,但任何人谁也支持这个代码的偏好。)
对于显著较大,多线,复杂的lambda表达式,这个名字就显得更为重要。 渐行渐远一个是从什么样的变量手段的背景下,变的更加的名称需要进行这方面它。
如何是一个lambda函数从任何其他方法如此不同。 如果有人用这样的方法来邮编:
public static int getAge(Person _)
{
return _.Age;
}
要么
public static int getAge(Person x)
{
return x.Age;
}
你打算说什么?
在我看来,选择参数的名称为拉姆达应该就像任何其他方法的参数作为有意义的。 我可能会偶有例外的身份函数x => x
,因为在这种情况下,变量不需要意味着什么,它真的可以是任何东西,但使用下划线或在我心中的一切的单个字母只是使代码少得多的可读性。 (所以很多人吹捧LINQ / Lambda表达式的优势为可读性,如果你混淆所有变量被击败。)
或者你可以使用一个有意义的名称,如
var ages = people.Select(person => person.Age);
在C#, _
用于类(属性)变量_
不用于局部变量。 所以,这是好事,对于局部变量和类变量使用有意义的名称。
例如:
var personList = (from person in people where person.Age > 18 select person).ToList();
有一些关于命名拉姆达变量没有“立”的风格。 然而,下划线通常意味着某种情况下成员变量,这意味着你的风格可能会和其他的命名标准相抵触相比正常的变量名。
长话短说 -为你做什么工作。
还有一个原因,你可以给它一个名字 - 因为有时你可以有多个输入和需要来区分它们:
Func<int,int,int> product = (num1, num2) => (num1 * num2); // takes in two ints, and returns one int
int x = product(2, 3);