TryParse 无缘无故返回 false

本文关键字:false 返回 无缘无故 TryParse | 更新日期: 2023-09-27 18:37:04

我在控制台应用程序中的简单TryParse有问题。

看一看:

string DepartureTimeString = Console.ReadLine(); // Enter 2015 01 11 22 45 30
// DepartureTimeString = 2015 01 11 22 45 30
string DepartureTimeStringTrim = DepartureTimeString.Replace(" ", "");
// DepartureTimeStringTrim = 20150111224530
Analyseur = int.TryParse(DepartureTimeStringTrim, out Resultat);
// Analyseur = false

"分析员"是错误的。
字符串是20150111224530.。它只是一个整数。
我用停止点检查了VS中的数据以确保。

问题出在哪里?

TryParse 无缘无故返回 false

可以存储在 intInt32 中的最大值为 int。最大值或 2,147,483,647。

您尝试存储在类型 int 的变量中的值大于此值,因此操作失败。应为此值使用 longInt64

我看到您正在尝试在int中存储DateTime.这不是一个好的做法,除非你有充分的理由这样做。您可以使用 DateTime.TryParseExact 将输入转换为DateTime。如果您使用 int 作为容器,则无法确定用户输入是否为有效日期,但可以使用DateTime

正如 Tim 在这里提到的,您可以在 DateTime.TryParseExact 中使用"yyyy MM dd HH mm ss"作为格式字符串,并将输入值解析为DateTime

似乎是一个DateTime而不是一个整数,所以使用DateTime.TryParse

string departureString = "2015 01 11 22 45 30";
DateTime departure;
if (DateTime.TryParseExact(departureString, "yyyy MM dd HH mm ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out departure))
    Console.Write("Departure at: " + departure.ToShortDateString());

不能解析为int的原因是 alrady 回答,int无法容纳它(-2,147,483,648 到 2,147,483,647),你需要更大的数据类型,如 long .

使用 Long 而不是 Int.Int 不是那么大。