【问题标题】:Perform class methods on a casted object对强制转换的对象执行类方法
【发布时间】:2013-10-09 08:17:22
【问题描述】:

我有以下代码:

DateTime dt = (DateTime)rdr["DateFromSQLDB"];
genericclass.classpropertystring = dt.ToShortDateString();

如何将其压缩为一行?

这是课程...

public class genericclass
{
    public string classpropertystring { get; set; }
}

它的效果很好,但我希望能够使用类似的东西:

genericclass.classpropertystring = (DateTime)rdr["DateFromSQLDB"].ToShortDateString();

谢谢!

【问题讨论】:

  • 谢谢大家。不见了()

标签: c# asp.net optimization


【解决方案1】:

这应该可行:

genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();

但是,这样做会降低代码的可读性,所以我会保留它,就像你在你的问题中一样。

【讨论】:

    【解决方案2】:

    你只是错过了两个括号:

    genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();
    

    【讨论】:

      【解决方案3】:

      你只需要确保你首先限定了对象:

      genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();
      

      通过在演员表周围添加括号,您可以将里面的所有内容都视为DateTime 类型。

      我同意@adrianbanks,但我更喜欢您的第一个示例的可读性。

      【讨论】:

        【解决方案4】:

        改用DbDataReader.GetDateTime

        genericclass.classpropertystring = rdr.GetDateTime(rdr.GetOrdinal("DateFromSQLDB")).ToShortDateString();
        

        【讨论】:

          【解决方案5】:

          为什么要压缩它?它使阅读变得更加困难。另外,如果返回的 rdr 对象为空怎么办?它会爆炸。我会尝试一些更强大的东西来处理潜在的坏值。虽然它需要更多代码,但您将处理更多情况,而不会到处都有一堆 try catch 块。

          public static void DoSomething()
              {
                  using (var connection =new SqlConnection("constring"))
                  {
                      var command = new SqlCommand("myquery", connection);
                      connection.Open();
                      SqlDataReader rdr = command.ExecuteReader();
                      while (rdr.Read())
                      {
                          var mc = new MyClass();
                          var mydate = rdr["DateFromSQLDB"];
                          if (mydate != null)
                          {
                              DateTime date;
                              if (DateTime.TryParse(mydate.ToString(), out date))
                              {
                                  mc.MyDateProperty = date.ToShortDateString();
                              }
                          }
                      }
                  }
              }
          

          【讨论】:

          • 我想要更少的代码,而不是更多。在我的情况下,DateFromSQLDB 不是可以为空的值,如果有行,则有一个有效的日期。我确实使用了一个try/catch 和一个while (rdr.Read()) 上面的代码只是为了提高可读性的简化版本。我不是您的反对者,我非常感谢您的反馈。谢谢。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-11
          • 1970-01-01
          • 2012-08-29
          • 2018-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多