在理解方法参数方面有困难

本文关键字:方面 参数 方法 | 更新日期: 2023-09-27 18:17:32

我对c#有点陌生,但开始对lambda表达式和委托是什么以及它们是如何工作的有所了解。

但是有一件事我不是100%理解,那就是如何"读取"函数的参数。

的例子。

在一个字符串中,我想把数字和字母分开。我从这个表达式中得到了帮助。

 tempstring = numberBox.Text;
 tempnumber = tempstring.ToCharArray().Where(c => Char.IsDigit(c)).ToString();

我明白它是做什么的,但是当我看方法Where()时,我不知道我在看什么。当我将鼠标悬停在上面时,它会显示这个文本

IEnumerable<char>IEnumerable<char>.Where<char>(Func<char, bool> predicate)(+1 overload)

我不知道该从这里得到什么。我知道在Func<char, bool>的参数中,它想要一个Char作为输入,并将boolean作为输出,但我不知道如何处理其余的。有没有什么文件可以指导我,或者有人可以在一个平均水平上解释这个?

在理解方法参数方面有困难

首先,您必须了解.Where()是来自。net 3.5的LINQ扩展方法。它充当IEnumerable<T>过滤器,在您的示例中,Tchar。所以基本上,你的表达式:

tempnumber = tempstring.ToCharArray().Where(c => Char.IsDigit(c)).ToString();

tempstring并转换为char[](它实现了IEnumerable<char>,因此启用了linq),并过滤结果序列,以便只返回满足谓词(Char.IsDigit(c)返回true)的char。最后,ToString()被调用到结果序列。

在图表中,考虑"Foo123"何时分配给tempstring:

          ToCharArray()
"Foo123"        ->      ['F', 'o', 'o', '1', '2', '3']    -> ['F',              'o'   ...              ]     ->  ['1' ,'2', '3']  -> ToString()
   ^                                                           ^                 ^
   |                                                           |                 |
  tempstring                                                Char.IsDigit()    Char.IsDigit()

顺便说一下,由于.Where期望Func<char, bool>Char.IsDigit具有相同的方法签名,您可以缩短它:

tempnumber = tempstring.ToCharArray().Where(Char.IsDigit).ToString()

不需要创建另一个匿名方法来调用Char.IsDigit

同样,您可以跳过ToCharArray()调用,因为string已经实现了IEnumerable<char>。因此,它可以简化为:

tempnumber = tempstring.Where(Char.IsDigit).ToString();

正如您已经指出的那样,Where期望一个谓词,该谓词将获取一个char作为输入并返回一个bool。

符号c => Char.IsDigit(c)是它的简写。这是一个lambda表达式,它可以被理解为如果c是一个数字,则输入c返回true。否则返回false。

这个表达式的左边部分(在=>符号之前)是输入,右边部分是输出。

c是什么?

让我们注意这一点,tempstring.ToCharArray()。后者将把tempstring指向的字符串转换为char的数组。由于数组对象实现了IEnumerable接口,因此可以使用名为Where的扩展方法来过滤数组的元素。写以下内容:

tempstring.ToCharArray().Where(c => Char.IsDigit(c))

你说只挑选这个数组中的数字字符。所以c对应于这个数组中的随机字符

你看到的是一个Lambda表达式,你可以在这里找到更多的信息:https://msdn.microsoft.com/en-GB/library/bb397687.aspx

传递给"Where"的是一个函数,该函数定义了要对组成Char数组的元素进行比较。您声明"c"是列表中的项(char),并且如果它与您的比较(bool)匹配,则希望返回"c"。

本例中提供的bool值是"Char.IsDigit(c)"。这个比较应用于列表(Char数组)中的每一项,任何返回true的都会返回给您。