int.Parse 在有效字符串上失败

int.Parse Fails On Valid String

我完全迷失了。

所以,我正在尝试使用 int.TryParse 来解析一个字符串,一个完全有效的字符串,仅包含数字“3”,仅此而已。但是,当我尝试解析它时,它返回 false。

这就是我使用它的方式 - 我调试了它,并且 int.TryParse 肯定会返回 false,因为 if 语句中的代码运行:

if (!int.TryParse(numberSplitParts[0], out int hour))
        return false;

而且我在调试器中查看过 numberSplitParts[0] 绝对是数字 3,完全正确!

现在,我做了一些研究,人们一直在说要使用不变的 CultureInfo,所以,我这样做了,这是新的更新行(我也试过 NumberStyles.Any 但也没有用) :

 if (!int.TryParse(numberSplitParts[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out int hour))
        return false;

这也行不通 - 它继续给我返回 falsehour0

我也尝试了所有其他数字类型 - byte.ParseInt16.Parse 等。所有这些都返回 false

而且,我已经尝试过常规 int.Parse,这只是给了我以下异常:

System.FormatException: 'Input string was not in a correct format.'

但是后来,我在另一个项目中尝试了它,所以,我复制了字符串数组和所有内容,它在那里工作 - 有和没有 "InvariantCulture" .

所以,我怀疑我正在工作的项目必须以导致 int.Parse/int.TryParse 无法工作的方式进行配置。这是在 class 库中,正在从 UWP 应用程序 访问 - 这是 UWP 下的 运行 这一事实有什么影响吗?

如评论中所述,这是由于您的输入中有几个 LEFT-TO-RIGHT MARK Unicode 字符。

当您在不同的项目中进行测试时,您可能对字符串 "3" 进行了硬编码,或者从未添加相同不可见字符的来源获取输入。

更好的测试是检查 numberSplitParts[0] == "3",无论是在手表 window 中还是在您的代码本身中。另一种方法是在您的 UWP 项目中设置 numberSplitParts[0] = "3",然后查看是否正确解析。

根据我的经验,大多数情况下 "this string looks fine but <stuff> fails" 是由于不可见的 Unicode 字符潜入您的输入。