【问题标题】:TryParse return false for no reasonTryParse 无缘无故返回 false
【发布时间】:2015-01-11 21:50:44
【问题描述】:

我在控制台应用程序中遇到了一个简单的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 中的数据以确定。

问题出在哪里?

【问题讨论】:

  • 这看起来像一个日期 - 您是否有理由尝试将其解析为 int 而不是 DateTime
  • 也许我一无所获...我只想将我的字符串转换为 DateTime。

标签: c# .net tryparse


【解决方案1】:

您可以在 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

【讨论】:

  • 感谢您的回答。我可以在没有更多步骤的情况下将像我的字符串这样的字符串转换为 DateTime 吗?
  • 作品:Analyseur = Int64.TryParse(DepartureTimeStringTrim, out Resultat64);
【解决方案2】:

这似乎是 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),您需要更大的数据类型,例如long

【讨论】:

  • 不错的答案。我什至不知道 DateTime.TryParseExact。谢谢它很强大!
【解决方案3】:

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

【讨论】:

  • 想到了,但不想给人一种“20150111224530”会直接解析为2015-01-11 22:45:30.000的印象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2012-04-29
  • 2019-01-13
  • 1970-01-01
  • 2017-04-11
相关资源
最近更新 更多