2009-04-12 30 views
10

Vì mục đích đơn giản, giả sử tôi muốn viết một phương pháp mở rộng cho kiểu int? và int:về loại và không thể sử dụng <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; 
    } 
} 

Điều này có thể thực hiện chỉ bằng cách sử dụng 1 phương pháp không?

Trả lời

16

Thật không may là không. Bạn có thể làm cho int? (hoặc bất kỳ kiểu nullable nào bạn đang sử dụng), phương thức gọi phương thức không nullable rất dễ dàng, vì vậy bạn không cần sao chép bất kỳ logic nào với 2 phương thức - ví dụ:

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

đẹp nhất! Đã làm cho tôi. – Jacques

8

Không, bạn không thể. Điều này có thể được xác nhận bằng thực nghiệm bằng cách biên dịch đoạn mã sau

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

Bạn sẽ cần phải viết một phương pháp mở rộng cho từng loại (nullable và không nullable) nếu bạn muốn nó được sử dụng trên cả hai loại.

Các vấn đề liên quan