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

C#自定义returnInt方法处理Substring(0)截取值时返回错误整数问题

问题原因

首字符返回值恒为0的核心问题是**Substring方法使用错误**。
C#里Substring有两个重载:

  • 单参数重载Substring(int startIndex):从传入的起始索引位置开始,截取到字符串末尾
  • 双参数重载Substring(int startIndex, int length):从起始索引开始,截取指定长度的字符

你写的totxt.Text.Substring(0),当输入是2位字符串比如a1时,返回的是整个字符串"a1",不是你想要的第一个字符"a"。这个完整字符串传入returnInt后,和所有if分支的判断值都不匹配,直接走到方法最后一行return 0,所以首参数永远返回0。
而Substring(1)是从索引1(也就是第二个字符)的位置截到末尾,刚好拿到单个数字字符,所以第二个参数的处理看起来是正常的。

另外你提到输入a1时期望两个参数都返回1,这和你当前returnInt的逻辑也不匹配:现有代码里"a"对应返回0,"1"对应返回0,就算修好了截取的问题,返回值也会是0和0,需要你根据实际索引需求调整映射规则。

修复方法
  1. 首先修正Substring的调用,截取首字符时明确指定截取长度为1:
// 修正后的调用代码
var toMove = myButtonArray[returnInt(totxt.Text.Substring(0, 1)), returnInt(totxt.Text.Substring(1))];
  1. (可选优化)替换掉冗长的if-else判断,用字符计算直接返回索引,代码更简洁也不容易写错:
public int returnInt(string x)
{
    if (string.IsNullOrEmpty(x) || x.Length != 1) return 0;
    char c = x[0];
    // 处理a-h字母映射
    if (c is >= 'a' and <= 'h')
    {
        // 要a对应0就返回c - 'a',要a对应1就+1,按你的需求调整
        return c - 'a';
    }
    // 处理1-8数字映射
    if (c is >= '1' and <= '8')
    {
        // 要1对应0就返回c - '1',要1对应1就改成c - '0'
        return c - '1';
    }
    return 0;
}

如果你确实需要输入a1时两个参数都返回1,把上面两个计算分支的返回值分别改成c - 'a' + 1和c - '0'即可。

改完之后再测试,截取的首字符就能正确匹配分支返回对应值,不会再恒为0。

内容的提问来源于stack exchange,提问作者totames

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:09:28