2013-02-18 52 views
1

正在写这样的犹太人的东西?或者有可能出现的问题?没有额外的方法转换为可空类型

private DateTime? getDate(object date) 
{ 
    return date != null ? Convert.ToDateTime(date) : (DateTime?)null; 
} 

我已经看到了很多的问过类似的问题的问题,但答案总是因为做的转换,我在想,如果我可以跳过这一步,写这样的作业的扩展方法,还是有一些边缘情况下我没有考虑?

另外我在示例中使用DateTime,但我会认为这可以适用于任何可空类型。

+0

我假设你已经占了InvalidCastException的或出现FormatException这种方法之外? http://msdn.microsoft.com/en-us/library/ky38w316.aspx - 如果是这样 - 看起来对我好! – Jay 2013-02-18 18:48:31

+0

@Jay在我的具体情况下,它来自数据库中的日期字段,所以它将是一个有效的日期或null,我只是要做到这一点,我回来的东西,所以我保留为每个值,或将其转换为适当的日期类型。 – 2013-02-18 18:52:13

+0

当你期待DateTime传入时,你为什么将一个对象当作参数?如果您想使其更具通用性,您可以使用具有以下签名的方法(我尚未验证此方法):private Nullable getNullable (T object)。您可以在该方法中使用通用转换方法。我很确定这与我见过的扩展方法示例类似,但它不是扩展方法,这是您所要求的。 – lintmouse 2013-02-18 18:57:58

回答

1

由于?Nullable<T>的一种,因此只要您知道实际的返回类型,就完全没问题,并且'kosher'。这是因为如果你正在写的方法:

private Nullable<DateTime> getDate(object date) 
{ 
    ... 
} 

只要你知道下面将不能工作,因为返回类型将有所不同:

DateTime myDateTimeVariable = getdate(someObject);因为它是一个类型转换的问题。

你可以看到这个再交代:Nullable DateTime?

+0

是的,它被存储到某种数据类型'datetime?'中,并且由于它来自日期数据库字段,它应该是有效日期或空值。我认为这回答了我的问题。 – 2013-02-18 19:08:23

相关问题