2009-04-12 6 views
10

En aras de la simplicidad, supongamos que quiero escribir un método de extensión para el tipo int? e INT:método de extensión en el tipo y anulable <type>

public static class IntExtentions 
{ 
    public static int AddOne(this int? number) 
    { 
     var dummy = 0; 
     if (number != null) 
      dummy = (int)number; 

     return dummy.AddOne(); 
    } 

    public static int AddOne(this int number) 
    { 
     return number + 1; 
    } 
} 

se puede hacer esto utilizando sólo 1 método?

Respuesta

16

Desafortunadamente no. Puedes hacer el int? (o cualquiera que sea el método de nullable que esté usando) llama al método que no admite nulos, por lo que no necesita duplicar ninguna lógica con 2 métodos, p. ej.

public static class IntExtensions 
{ 
    public static int AddOne(this int? number) 
    { 
     return (number ?? 0).AddOne(); 
    } 

    public static int AddOne(this int number) 
    { 
     return number + 1; 
    } 
} 
+0

nice one! Trabajó para mi. – Jacques

8

No, no puedes. Esto puede ser verificado experimentalmente por compilar el código siguiente

public static class Example { 
    public static int Test(this int? source) { 
    return 42; 
    } 
    public void Main() { 
    int v1 = 42; 
    v1.Test(); // Does not compile 
    } 
} 

Usted tendrá que escribir un método de extensión para cada tipo (anulable y no anulable) si desea que se utilicen en ambos tipos.

Cuestiones relacionadas