2009-04-12 7 views
10

Par souci de simplicité, supposons que je souhaite écrire une méthode d'extension pour le type int? et int:méthode d'extension sur le type et nullable <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; 
    } 
} 

peut-il être fait en utilisant seulement 1 méthode?

Répondre

16

Malheureusement non. Vous pouvez faire l'int? (ou quel que soit le type Nullable que vous utilisez), appelez la méthode non nullable très facilement, donc vous n'avez pas besoin de dupliquer une logique avec 2 méthodes - par ex.

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

une belle! A travaillé pour moi. – Jacques

8

Non, vous ne pouvez pas. Cela peut être vérifié expérimentalement en compilant le code suivant

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

Vous aurez besoin d'écrire une méthode d'extension pour chaque type (annulable et non annulable) si vous voulez utiliser sur les deux types.

Questions connexes