TryParse无缘无故地返回false

时间:2015-01-11 21:50:45

标签: c# .net tryparse

我在控制台应用程序中遇到一个简单的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 ..它只是一个int ..
我确定了VS中的停止点数据。

问题出在哪里?

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:4)

这似乎是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的原因是answeredint无法保持它(-2,147,483,648到2,147,483,647),您需要更大的数据类型,如{{1} }。

答案 2 :(得分:3)

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

相关问题