.net XML LINQ选择对象-使用TryParse

.net XML LINQ选择对象-使用TryParse,.net,xml,linq,.net,Xml,Linq,我使用以下代码使用LINQ从XML加载对象列表: List<Order> TheList = (from order in XMLResponse.Descendants("Order") select new Order { OrderDate = DateTime.Parse(order.Element("OrderDate").Value) }).ToList<Order>(); 但该代码会产生一个无效的参数异常

我使用以下代码使用LINQ从XML加载对象列表:

List<Order> TheList = 
    (from order in XMLResponse.Descendants("Order")
    select new Order
    {
        OrderDate = DateTime.Parse(order.Element("OrderDate").Value)
    }).ToList<Order>();
但该代码会产生一个无效的参数异常


我知道我可以使用一个中间类(包含所有字符串值)来加载这些值,但对于我试图完成的工作来说,这似乎是多余的代码。有没有办法在我上面的代码中使用TryParse?谢谢

假设这是一个XML格式正确的日期,您可以转换为
DateTime?

from order in XMLResponse.Descendants("Order")
select new obj
{
    OrderDate = (DateTime?) order.Element("OrderDate")
}).ToList<Order>();
这基本上提供了另一种形式的
TryParse
,它使用
Nullable
而不是单独的布尔标志来指示解析失败

顺便说一下,我强烈建议您使用带有适当格式字符串和区域性的
TryParseExact

internal class DateTimeParse
{
  public DateTimeParse(string str)
  {
     DateTime dt = DateTime.MinValue;
     Correct = DateTime.TryParse(str, out dt);
     if (Correct) Value = dt;
  }

  public DateTime Value { get; private set; }
  public bool Correct { get; private set; }
}


这里的问题是
DateTime.Tryparse
像几乎所有
Tryparse
一样返回布尔值。 这里的OUT参数是一个
日期时间
(不可为空)

就像:

bool myBool = Datetime.TryParse(myString, out myDateTimeNotNullable);
您还可以将其嵌套在验证中使用:

    if(Datetime.TryParse(myString, out myDateTimeNotNullable))
    {
      //myDateTimeNotNullable has the valid DateTime from myString
    }
    else
    {
      //myDateTimeNotNullable has the value set to new DateTime()
    }
这就是我要写的:

DateTime OrderDate;
DateTime.TryParse(((XmlNode)order.Element("OrderDate")).InnerText, out OrderDate);

我希望它能帮助一些人,因为这是一篇老文章。

我刚刚更正了“选择新对象”行,我应该提到的是,我必须在TryParseDateTime方法中更改返回行,以包含第二个参数,比如:DateTime.TryParse(value,out-ret)?ret:(DateTime?)空@贝凡德哈尔:哎呀,是的:)会修好的。
bool myBool = Datetime.TryParse(myString, out myDateTimeNotNullable);
    if(Datetime.TryParse(myString, out myDateTimeNotNullable))
    {
      //myDateTimeNotNullable has the valid DateTime from myString
    }
    else
    {
      //myDateTimeNotNullable has the value set to new DateTime()
    }
DateTime OrderDate;
DateTime.TryParse(((XmlNode)order.Element("OrderDate")).InnerText, out OrderDate);