在铸造对象上执行类方法

时间:2013-10-08 22:07:03

标签: c# asp.net optimization

我有以下代码:

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

如何将其压缩为一行?

这是班级......

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

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

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

谢谢!

5 个答案:

答案 0 :(得分:1)

你只想念2个括号:

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

答案 1 :(得分:1)

这应该有效:

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

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

答案 2 :(得分:1)

您必须首先确保对该对象进行限定:

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

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

我同意@adrianbanks,我更喜欢你的第一个例子的可读性。

答案 3 :(得分:1)

改为使用DbDataReader.GetDateTime

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

答案 4 :(得分:0)

为什么要浓缩它?这使得阅读更加困难。如果返回的rdr对象是null,该怎么办?它会炸毁。我会尝试一些更强大的东西来处理潜在的坏值。虽然需要更多的代码,但是你可以处理更多的情况,而不需要在整个地方都有一堆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();
                    }
                }
            }
        }
    }