2009-04-12 7 views
10

Для простоты предположим, что я хочу написать метод расширения для типа int? и INT:метод расширения по типу и 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; 
    } 
} 

Может ли это быть сделано, используя только один метод?

ответ

16

К сожалению, нет. Вы можете сделать int? (или какой тип с нулевым типом вы используете) метод вызывает метод без значения NULL очень легко, так что вам не нужно дублировать какую-либо логику с помощью двух методов - например,

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

приятный! Работал для меня. – Jacques

8

Нет, вы не можете. Это может быть проверено экспериментально путем компиляции следующего кода

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

Вам нужно будет написать метод расширения для каждого типа (обнуляемого и не обнуляемого), если вы хотите использовать на обоих типов.