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,需要你根据实际索引需求调整映射规则。
修复方法
- 首先修正Substring的调用,截取首字符时明确指定截取长度为1:
// 修正后的调用代码 var toMove = myButtonArray[returnInt(totxt.Text.Substring(0, 1)), returnInt(totxt.Text.Substring(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
相关产品推荐
相关产品推荐

