TryParse return false 无缘无故

TryParse return false for no reason

我在控制台应用程序中遇到一个简单的 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

'Analyseur' 是假的..
字符串是 20150111224530.. 它只是一个 int..
我已经用停止点检查了 VS 中的数据以确保。

问题出在哪里?

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

您可以在 intInt32 中存储的最大值是 int.MaxValue 或 2,147,483,647。

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

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

As Tim mentioned 您可以使用 "yyyy MM dd HH mm ss" 作为 DateTime.TryParseExact 中的格式字符串并将输入值解析为 DateTime.

这似乎是 DateTime 而不是 int,所以使用 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是因为, int已经装不下了(-2,147,483,648到2,147,483,647),你需要更大的数据类型,比如long.