C#是否有可直接传入起止索引截取字符串的内置方法
C# 内置的起止索引字符串截取能力说明
核心结论
- 存在原生内置的便捷实现,从.NET Core 2.1、.NET Standard 2.1、.NET Framework 4.8版本开始,框架就自带了基于范围的字符串切片能力,不需要重复封装通用方法。
实际用法
C# 8.0 引入的范围运算符 .. 配合字符串的内置索引器,已经可以实现免算截取长度的切片操作,对应你的需求场景的代码示例:
string s = "Hello, world!"; // 直接传入索引区间,得到的结果为 "world" var result = s[7..12];
这里需要特别注意内置切片的边界规则,和你之前自定义的扩展方法有差异:
- 内置字符串范围索引遵循左闭右开逻辑:起始索引位置的字符会被包含在结果里,结束索引位置的字符不会被包含在结果里。
- 你写的
SubstringByIndexes是闭区间逻辑:传入的start和end两个位置的字符都会被包含在结果里。
对应你的需求,要截取到索引11的'd'字符,在内置写法里需要把结束位置写为12(也就是索引12的'!'所在位置),才能刚好把'd'纳入截取结果。
其他内置特性
- 内置切片支持反向从字符串末尾指定边界,不需要手动计算正向索引值,比如要截取从索引7开始、到最后一位字符之前的所有内容,可以直接写:
这里的// 等价于 s[7..12],结果同样是 "world" var reverseIndexResult = s[7..^1];^1代表从字符串末尾往前数第一位的位置,也就是原字符串中!的所在位置。
版本兼容提示
- 如果你的项目运行在不支持C# 8.0范围语法的旧框架版本(比如.NET Framework 4.7及以下、.NET Core 2.0及更早版本),框架没有提供对应的内置便捷方法,这个时候自行编写扩展方法跨项目复用是合理的选择。
内容的提问来源于stack exchange,提问作者Jacob Lockard
相关产品推荐
相关产品推荐

