如何为Nullable和Not Nullable编写扩展方法

时间:2010-11-10 02:14:41

标签: asp.net extension-methods nullable

我写了以下扩展方法

    <Extension()>
    Public Function ToUtcIso8601(ByVal dt As Date) As String
        Return String.Format("{0:s}Z", dt)
    End Function

但是我也需要一个同样方法的Nullable版本......我到底该怎么做?

这就是我的想法,但我不确定这是否正确

    <Extension()>
    Public Function ToUtcIso8601(ByVal dt As Date?) As String
        Return If(dt, Nothing).ToUtcIso8601()
    End Function

或其他选项

    <Extension()>
    Public Function ToUtcIso8601(ByVal dt As Date?) As String
        Return If(Not dt Is Nothing, ToUtcIso8601(dt), Nothing)
    End Function

我只是不确定这样做的“正确”方法。

被修改

这实际上有效,但是......

    Public Function ToUtcIso8601(ByVal dt As Date?) As String
        Return If(Not dt Is Nothing, ToUtcIso8601(dt.Value), Nothing)
    End Function

这是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

我会选择第二种选择。不幸的是,在Date结构上使用扩展方法时,Date?扩展方法不适用,否则您只能为Date声明一个扩展名?类型。您必须采用与已有的方法类似的方法来支持这两种类型。