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

.NET桌面应用与ASP.NET中StartsWith方法行为不一致问题排查

问题:.NET桌面与ASP.NET应用中StartsWith行为不一致

我在.NET桌面应用和Visual Studio运行的ASP.NET Web应用中遇到了行为不一致的问题,两者使用完全相同的正则表达式和判断逻辑,但结果却不同。

重现代码

正则匹配代码:

Dim mStart As Match = Regex.Match(s, "^((<|⏸)(?<tag>\w+)\(|⸨)")

后续判断逻辑:

If mStart.Groups("tag").Success Then
  If mStart.Value.StartsWith("⏸") Then
    ' ASP.NET中当mStart.Value = "<mn"时意外返回true
  End If
End If

问题现象

  • 桌面应用:当mStart.Value为<mn时,StartsWith("⏸")正确返回false,因为首字符是ASCII 60(<)
  • ASP.NET应用:mStart.Value同样为<mn(长度3),且AscW(mStart.Value(0)) = 60,但StartsWith("⏸")意外返回true

补充细节

此前调用同一方法时,输入字符串s以⏸mn开头,条件能正确触发;但后续调用中,当s = "<mn"时,即使首字符明确是<,StartsWith("⏸")仍返回true。

已验证内容

我已经逐一确认以下信息:

  • mStart.Value = "<mn"
  • mStart.Value.Length = 3
  • AscW(mStart.Value(0)) = 60
  • 字符串无不可见字符或前导BOM,逐字符循环确认首字符确实是<

假设方向

我目前考虑的可能原因:

  • Unicode归一化差异
  • Regex.Match中的字符串缓存或复用机制问题
  • HTML/XML解码过程中引入隐藏字符
  • .NET桌面端与ASP.NET对Regex.Match().Value的处理存在平台特定差异

是否有人遇到过类似问题?这是否是.NET的bug、缓存问题或是平台特定行为?期待相关见解。

内容的提问来源于stack exchange,提问作者Xavier Junqué

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:53:16