2010-11-10 14 views
1

J'ai écrit la méthode d'extension suivanteComment écrire des méthodes d'extension pour les deux Nullable et non nullables

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

Mais je dois aussi une version Nullable de la même méthode ... comment exactement dois-je faire cela?

C'est ce que je pensais, mais je ne suis pas sûr que ce soit la bonne façon

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

ou une autre option

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

Je ne suis pas sûr « droit » façon de le faire.

Edité

Cela fonctionne en fait, mais ...

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

Est-ce la bonne façon de le faire?

Répondre

2

J'irais pour la deuxième option. Malheureusement, lorsque vous utilisez des méthodes d'extension sur une structure Date, Date? méthodes d'extension ne sont pas applicables, sinon vous pourriez simplement déclarer une extension pour la date? type. Vous devrez adopter une approche similaire à celle que vous avez déjà afin de soutenir les deux types.

+0

Malheureusement, ma deuxième option bloque le service WebDev –

+0

Vous devrez alors fournir une trace de pile ou quelque chose d'autre. – cdhowie

+2

Ne devrait pas la ligne lire: 'Retour si (pas dt n'est rien, ToUtcIso8601 (dt.value), Nothing)' débogueur – David