如何将C#中检查字符串仅含数字的代码转为Lambda表达式?
把数字检查循环转换成Lambda表达式
没问题!我来帮你把这段检查字符串是否全为数字的循环代码转换成Lambda表达式,顺便给你拆解清楚逻辑,帮你理解Lambda的用法~
首先,你原来的代码逻辑是:遍历字符串中的每一个字符,只要发现任何一个字符不在'0'到'9'的范围内,就返回false;如果所有字符都符合要求,最终返回true。
用Lambda结合LINQ的All方法可以完美实现这个逻辑,而且代码更简洁:
写法1:作为方法体(表达式主体定义)
bool IsAllDigits(string str) => str.All(c => c >= '0' && c <= '9');
写法2:赋值给委托变量(单独的Lambda表达式)
如果你需要把这个逻辑作为一个可复用的委托,也可以这样写:
Func<string, bool> isAllDigits = str => str.All(c => c >= '0' && c <= '9');
简单解释一下:
str.All(...):LINQ的All方法会遍历字符串的每一个字符,只有当所有字符都满足括号里的条件时,才返回true,否则返回false,和你原来的循环逻辑完全一致。c => c >= '0' && c <= '9':这就是核心的Lambda表达式,c是参数(对应你循环里的每个字符),箭头=>后面是判断条件——这个字符是否是数字。Lambda本质就是简化的匿名函数,这里它作为All方法的参数,告诉方法每个字符需要满足什么条件。
如果你调用这个方法/委托,比如IsAllDigits("12345")或者isAllDigits("abc123"),就能得到对应的true或false啦。
内容的提问来源于stack exchange,提问作者Gautam
相关产品推荐
相关产品推荐

