【发布时间】:2022-01-19 14:15:14
【问题描述】:
我在 Codewars 上解决了一个 C# 初学者 Kata,要求返回一个只有 4 个字符名称的字符串 []。我使用了一个列表,它在 if 语句中填充,然后转换回字符串并返回。
我的问题是关于下面的最佳实践解决方案,稍后会介绍。
我知道作为参数出现的相同 string[] 会重新填充元素并返回。 但是程序如何知道数组的每个元素都称为“名称”,因为它以前从未提到过?
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.Length == 4是一个单参数代表。您已将参数命名为name,但如果它是banana,它也同样有效。数组names的各个元素没有自己的名称(当然,数组参数命名为names只是因为它也是这样声明的,giraffes也可以工作)。 -
它知道它被称为
name,因为您在=>之前的部分中调用了它。您可以将name => name.Length == 4更改为turnip => turnip.Length == 4,它的工作方式完全相同。 -
我投票决定重新提出这个问题,因为我认为副本不合适。被选为重复的问题与此问题不同,并且没有一个答案是该问题的答案。此外,这是一个封闭的问题,它指向的 3 个重复项中的 1 个被删除。其他 2 个是关于 lambdas 的一般问题,没有一个答案显然能回答这个问题。这个问题的答案可能就藏在那个地段的某个地方,但肯定不容易找到。
-
为了澄清,再次查看骗子的答案,他们都使用
x作为他们的 lambda 变量,但没有人说明他们为什么使用x,或者给出如何编写合适的建议变量的名称。我认为对于刚接触 lambda 语法的人来说,想知道代码的原始作者如何知道要使用什么变量名,因为在任何地方都没有var x/var name语句,这是一个完全合理(且独特)的问题。 -
@Tim 考虑到重复状态下的答案与那些 cmets 相同,为什么您认为重复状态没有回答问题?问题询问变量的定义位置,副本描述变量的定义位置。这就是问题的答案。