C#能否像Python一样在return语句末尾使用生成器实现字符串大小写反转?
实现方案
C#完全可以实现类似Python的单行写法,对应Python生成器表达式的是C#的LINQ投影操作(Select方法),无需多行循环。
正确单行实现代码
return string.Concat(text1.Select(c => char.IsLower(c) ? char.ToUpper(c) : char.IsUpper(c) ? char.ToLower(c) : c));
如果追求更高性能,也可以用new string写法:
return new string(text1.Select(c => char.IsLower(c) ? char.ToUpper(c) : char.IsUpper(c) ? char.ToLower(c) : c).ToArray());
语法说明
- 你之前的写法报错,是因为C#不支持直接内联
foreach作为生成器,需要用LINQ的Select方法实现集合元素的逐位转换,逻辑和Python生成器表达式完全等价 - 上述代码直接使用
char类型的ToUpper/ToLower方法,无需转字符串操作,简化代码的同时提升了执行效率 string.Concat可以直接接收IEnumerable<char>类型的序列完成拼接,不需要额外指定分隔符,和Python的''.join()效果完全一致- 如果编译提示找不到
Select方法,只需在代码文件顶部引入命名空间using System.Linq;即可,这是C#默认自带的基础库,不需要额外安装依赖
内容的提问来源于stack exchange,提问作者Adam Sharp
相关产品推荐
相关产品推荐

