Asp.net 如何为可为null和不可为null编写扩展方法
我已经编写了以下扩展方法Asp.net 如何为可为null和不可为null编写扩展方法,asp.net,vb.net,extension-methods,nullable,Asp.net,Vb.net,Extension Methods,Nullable,我已经编写了以下扩展方法 <Extension()> Public Function ToUtcIso8601(ByVal dt As Date) As String Return String.Format("{0:s}Z", dt) End Function 这是正确的方法吗?我选择第二种方法。不幸的是,在对日期结构使用扩展方法时,日期?扩展方法不适用,否则您可以只为日期声明一个扩展?类型。为了支持这两种类型,您必须采用与现有方法类似的方
<Extension()>
Public Function ToUtcIso8601(ByVal dt As Date) As String
Return String.Format("{0:s}Z", dt)
End Function
这是正确的方法吗?我选择第二种方法。不幸的是,在对日期结构使用扩展方法时,日期?扩展方法不适用,否则您可以只为日期声明一个扩展?类型。为了支持这两种类型,您必须采用与现有方法类似的方法。不幸的是,我的第二个选项一直使WebDev服务崩溃,您需要提供堆栈跟踪或其他内容。该行不应该读取:
返回If(不是dt为Nothing,是ToutISO8601(dt.value),Nothing)
调试器看起来像是在创建一个无限loop@rockinthesixstring:这对我来说很好,但是我总是发现在这种情况下可以使用可空类型清理器的.HasValue属性;我会使用类似这样的东西:Return If(dt.HasValue,ToUtcIso8601(dt.Value),Nothing)可能是@MichaelFreidgeim的副本是的,也可能不是。这一个是VisualBasic,另一个是c#
<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