gpt4 book ai didi

c# - 无法理解方法参数

转载 作者:行者123 更新时间:2023-11-30 21:54:25 25 4
gpt4 key购买 nike

我是 C# 的新手,但开始对 lambda 表达式和什么是委托(delegate)及其工作方式有了一些了解。

但是我不是 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()LINQ .NET 3.5 的扩展方法。它充当 IEnumerable<T>过滤器 ,在你的情况下,Tchar .所以基本上,你的表达:

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

正在服用tempstring并转换为 char[] (它实现了 IEnumerable<char>,因此启用了 LINQ)并过滤结果序列,以便只有 char返回满足谓词( Char.IsDigit(c) 返回 true )的 s。最后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();

关于c# - 无法理解方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com