Convert Object to a DateTime
public static DateTime ObjectToDateTime(object o, DateTime defaultValue)
if (o == null) return defaultValue;
if (DateTime.TryParse(o.ToString(), out dt))
The code feels too wordy and smells bad. Is there a better way?
You could get rid of the "else" (because in the true case it has already returned), but that's not much of an improvement. Other than that, this looks pretty optimal (clarity-wise) to me.
return o as DateTime ?? defaultValue;
`DateTime` is a value type and thus could not be used with the `as` operator nor set to `null`. That would be invalid code.
On the offhand chance that your object is already a
DateTime, you're performing unnecessary conversions to and from strings.
if (o is DateTime)
This also strikes me as something you might be doing for a database item, for example. In which case, I'd encourage you to know and trust your data types and then use existing methods of retrieval.
For example, if you have a
DataTablewith a column
CreatedDate, you should know it's a date, what you might not know is if it has a value if the column is nullable at the database. That's fine, you can handle that in code.
var createdDate = row.Field<DateTime?>("CreatedDate");
There we go, a
DateTime?, no coding of a conversion necessary. You can even specify a default and type if to
var createdDate = row.Field<DateTime?>("CreatedDate").GetValueOrDefault(DateTime.Now);
var createdDate = row.Field<DateTime?>("CreatedDate") ?? DateTime.Now;