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;
这也行不通 - 它继续给我返回 false
,hour
是 0
。
我也尝试了所有其他数字类型 - byte.Parse
、Int16.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 字符潜入您的输入。
我完全迷失了。
所以,我正在尝试使用 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;
这也行不通 - 它继续给我返回 false
,hour
是 0
。
我也尝试了所有其他数字类型 - byte.Parse
、Int16.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 字符潜入您的输入。