s => s =='w'-帮助我了解这一行代码

时间:2018-07-05 10:28:55

标签: c#

我是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搜索。但我似乎找不到答案。

预先感谢您:)

3 个答案:

答案 0 :(得分:5)

这是lambda expression

在这种情况下,它声明一个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

的出现