我是C#和编码方面的新手,对我正在做的一项练习有疑问。我正在关注w3resource上的练习,遇到了必须解决此问题的挑战: “编写C#程序,以检查给定的字符串是否包含1到3次之间的'w'字符。”
我的解决方法是这样:
var theString = Console.ReadLine();
var theArray = theString.ToCharArray();
int betweenOneAndThree = 0;
for (int i = 0; i < theArray.Length - 1; i++)
{
if (theArray[i] == 'w')
betweenOneAndThree++;
}
Console.WriteLine(betweenOneAndThree >= 1 && betweenOneAndThree <= 3);
Console.ReadLine();
这很好,但是我检查了他们的解决方案,结果是这样的:
Console.Write("Input a string (contains at least one 'w' char) : ");
string str = Console.ReadLine();
var count = str.Count(s => s == 'w');
Console.WriteLine("Test the string contains 'w' character between 1 and 3 times: ");
Console.WriteLine(count >= 1 && count <= 3);
Console.ReadLine();
我看不到's'
被声明为char变量,而且我不明白它在这里做什么。有人可以向我解释s => s == 'w'
的作用吗?
是的,我已经尝试过使用Google搜索。但我似乎找不到答案。
预先感谢您:)
答案 0 :(得分:5)
在这种情况下,它声明一个anonymous delegate并传递给Count,其this overload的签名指定一个Func<T, bool>
,这是一个带T的匿名函数的类型表示(集合中对象的类型)并返回bool。 Count()
将针对集合中的每个对象执行此功能,并计算返回true
的次数。
答案 1 :(得分:1)
str.Count(s => s == 'w')
基本上是一种简短的说法:
result = 0;
foreach (char s in str)
{
if (s == 'w')
{
result += 1;
}
}
return result;
答案 2 :(得分:0)
s => s == 'w'
是具有lambda表达式的谓词委托,
str.Count(s => s == 'w')
仅计算字符w