使用WebConfigurationManager读取端口转Int32触发FormatException求助
解决Int32.Parse转换配置端口抛出FormatException的问题
兄弟,我敢打赌你遇到的是隐形字符搞的鬼!你看到的portString在调试器里显示是44311,但它大概率藏了肉眼看不见的Unicode特殊字符(比如零宽空格、左/右方向标记这类),这些字符会被Int32.Parse判定为非法格式,导致报错——而你硬编码的时候是手动输入的纯数字,自然不会有这个问题,和异步方法完全没关系。
验证方法:找出隐形字符
你可以先把portString的每个字符的Unicode编码打出来,就能看到猫腻:
foreach (char c in portString) { Console.WriteLine($"字符: '{c}', Unicode编码: U+{((int)c):X4}"); }
运行后你会发现,除了数字4、4、3、1、1之外,可能还会出现类似U+200E(左到右标记)这类奇怪的编码,这就是罪魁祸首。
解决办法
1. 彻底清理配置文件
直接打开你的配置文件,手动重新输入一遍port的值,不要复制粘贴,确保没有带入任何隐形字符。这是最根本的解决方式。
2. 代码层面过滤非法字符
如果担心以后再出现类似情况,可以在转换前先过滤掉非数字的字符:
// 只保留字符串中的数字字符 var cleanPortString = new string(portString.Where(char.IsDigit).ToArray()); var port = Int32.Parse(cleanPortString);
3. 更安全的转换方式
推荐使用int.TryParse结合字符过滤,这样即使有问题也不会崩溃,还能记录异常信息:
var cleanPortString = new string(portString.Where(char.IsDigit).ToArray()); if (int.TryParse(cleanPortString, out var port)) { // 正常使用端口 } else { // 记录日志,方便排查问题 Console.WriteLine($"端口转换失败,原始值: '{portString}'"); }
内容的提问来源于stack exchange,提问作者Ogglas
相关产品推荐
相关产品推荐

