You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中IndexOf方法出现异常查找结果,该行为是否为设计预期?

结论

该行为属于.NET的预期设计,核心原因是IndexOf默认采用区域性敏感的文本匹配规则,而非按Unicode码点逐位对比的序数匹配。

原因拆解
  • 你观测到的第4个字符值为1560,对应Unicode码位U+0618(阿拉伯小文高音塔纳维尔符号),属于Unicode中的非间距组合标记,默认文本匹配规则会将它和前方紧邻的基字符(即位置2的冒号)绑定为一个独立的文本元素。
  • 默认的IndexOf重载在匹配时会将这个绑定后的组合单元视为整体,不会单独匹配其中的基字符,因此搜索单独的冒号时无法命中位置2的字符,返回-1。
解决方法

如果需要按字符码点做精确匹配,使用带StringComparison.Ordinal参数的重载即可得到预期结果:

// 输出结果为 2
Console.WriteLine(":::ؘ".IndexOf(":", 2, StringComparison.Ordinal));

另外纠正你之前的误解:字符串长度异常和你提到的「双引号字符差异」无关,是你定义字符串时意外引入了隐藏的U+0618控制字符,通常是从其他排版文档复制粘贴内容时带入的。

内容的提问来源于stack exchange,提问作者Thomas C. G. de Vilhena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:15:05