0

我有以下代码:

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

我怎样才能把它浓缩成一行?

这里是课堂...

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

它按原样工作得很好,但我希望能够使用类似的东西:

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

谢谢!

4

5 回答 5

1

你只是错过了2个括号:

genericclass.classpropertystring = ((DateTime)rdr["DateFromSQLDB"]).ToShortDateString();
于 2013-10-08T22:09:06.367 回答
1

这应该有效:

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

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

于 2013-10-08T22:09:07.333 回答
1

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

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

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

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

于 2013-10-08T22:09:17.987 回答
1

改用DbDataReader.GetDateTime

genericclass.classpropertystring = rdr.GetDateTime(rdr.GetOrdinal("DateFromSQLDB")).ToShortDateString();
于 2013-10-08T22:09:29.017 回答
0

为什么要浓缩它?它使阅读变得更加困难。另外,如果返回的 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();
                    }
                }
            }
        }
    }
于 2013-10-09T00:17:22.080 回答