You need to enable JavaScript to run this app. C#是否有可直接传入起止索引截取字符串的内置方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.12 19:36:05