我已经解决了一个C#初学者卡塔在代码战,要求返回一个字符串[]只有4个字符的名称。我使用了一个列表,该列表填充在if语句中,然后转换回字符串并返回。
我知道作为参数的字符串[]被元素填充并返回。但是程序如何知道数组的每个元素都被称为“名称”,因为它以前从未提到过?
linq是否知道一个具有单数名称的变量是复数名称组的一个元素,这里是“名称”?
谢谢你帮忙!
using System;
using System.Collections.Generic;
using System.Linq;
public static class Kata {
public static IEnumerable<string> FriendOrFoe (string[] names) {
return names.Where(name => name.Length == 4);
}
}
我知道作为参数的同一字符串[]被元素重新填充并返回。
不,绝对不是。基于输入数组返回一个全新的数组。不以任何方式修改或更改输入数组。
但是程序如何知道数组的每个元素都被称为“名称”,因为它以前从未提到过?
name
是匿名函数的参数。name
参数是基于上下文的字符串。这可以是x
或ASDASDASD
或您想要的任何东西,但这里我们使用name
,因为我们在每次调用中都有一个来自name
的“name”。
因此
name
是传递给函数的字符串数组.其中
基于谓词函数从当前数组返回一个新数组(例如,匹配返回true,忽略返回false)name=
linq是否知道一个具有单数名称的变量是复数名称组的一个元素,这里是“名称”?
不IDE知道变量name
,因为在Where(
也许把它和你已经知道的东西联系起来会有帮助。编写以下代码是完全可以接受的:
public static class Kata {
public static IEnumerable<string> FriendOrFoe (string[] names) {
return names.Where(IsNameOfLengthFour);
}
static bool IsNameOfLengthFour(string name){
return name.Length == 4;
}
}
其中要求提供某种方法,该方法接受字符串并返回布尔值。它要求输入是一个字符串,因为它被调用的name
是一个字符串数组。如果它是数组中的int,则传递到where的方法必须接受一个int
在C#中,经常会有一种让事情变得更紧凑的推动力,所以为了摆脱上面所有的冗长,我们有一种更紧凑的写作方法主体形式。让我们减少我们冗长的版本:
static bool IsNameOfLengthFour(string name){
return name.Length == 4;
}
我们可以丢弃返回类型,因为我们可以从返回的类型中猜出。我们也可以去掉static,假设static是从另一个static内部调用的,或者假设不是。我们也可以抛弃输入类型,因为我们可以从输入的类型中猜出。
IsNameOfLengthFour(name){
return name.Length == 4;
}
如果我们有一个特殊的syntx,它只有一行,并且必须是自动返回的值,那么我们可以去掉return
,以及{}
,因为它只有一行,所以我们不需要避开多个语句:
IsNameOfLengthFour(name) => name.Length == 4
现在,如果我们要在一个名称不相关的地方使用它,我们实际上也不再需要方法名称,而且我们也不需要对单个参数使用()
:
name => name.Length == 4
对于编译器来说,这就足够了,可以用它来构造一个方法,并将它插入到一个需要一个字符串并返回布尔值的方法中
Where(n => n.Length==4);
你做得很好,称这个迷你方法的论点是合理的。我看到x
被大量使用,当x的内容发生变化时,它会变得非常混乱。。例如:
names
.Where(name => ...)
.GroupBy(name => ...)
.Select(g => g.First())
.Where(name => ...)
其中
适用于名称数组,因此将参数调用到代理name
或n
是一个好主意。Where将对其进行过滤,但最终它仍然会发出一组字符串,这些字符串是名称,因此在进入GroupBy的过程中调用它仍然是一个好主意。。但是GroupBy生成的是一组i分组,而不是一组字符串,因此GroupBy的名称不再是名称。。在下一个选择中,我将其称为g
,以反映它是一个分组,而不是一个名称,但随后我将取分组中的第一项,实际上是一个名称。。因此,在最后一部分中,我返回到调用输入参数name
,以反映它的原貌。。
当LINQ语句变得更加复杂时,正确命名这些参数确实有帮助