2010-10-28 22 views
19

Biên dịch mã sau sẽ trả về lỗi The call is ambiguous between the following methods or properties. Làm thế nào để giải quyết nó vì tôi không thể chuyển đổi rõ ràng null thành bất kỳ lớp nào trong số những lớp đó?Làm thế nào để giải quyết sự mơ hồ khi đối số là null?

static void Main(string[] args) 
{ 
    Func(null); 
} 

void Func(Class1 a) 
{ 

} 

void Func(Class2 b) 
{ 

} 
+1

oh, xin lỗi, có vẻ như tôi có thể :) – Poma

Trả lời

24
Func((Class1)null); 
10

Cast null các loại:

Func((Class1)null); 
3

Bạn sẽ có thể đúc rỗng hoặc là của những người, giống như bạn sẽ một biến Func((Class1)null).

8

Bạn cũng có thể sử dụng một biến:

Class1 x = null; 
Func(x); 
+2

+1 Phương pháp này dễ đọc và dễ hiểu hơn func ((Class1) null). Đúc null không trực quan. – wllmsaccnt

+0

Điều này là thích hợp để đúc bất cứ nơi nào có thể, vì nó bắt gặp nhiều vấn đề tại thời gian biên dịch mà nếu không sẽ là lỗi thời gian chạy. – hypehuman

4

Các Func() phương pháp chấp nhận một loại tài liệu tham khảo như một tham số, có thể là null. Vì bạn đang gọi phương thức với giá trị null rõ ràng, trình biên dịch không biết liệu giá trị của bạn có phải là tham chiếu đến đối tượng Class1 hoặc đối tượng Class2 hay không.

Bạn có hai lựa chọn:

Cast null cho một trong hai Class1 hoặc Class2 loại, như trong Func((Class1)null) hoặc Func((Class2)null)

Cung cấp quá tải mới của Func() phương pháp mà chấp nhận không có tham số, và gọi quá tải mà khi bạn không có tham chiếu đối tượng rõ ràng:

void Func() 
{ 
    // call this when no object is available 
} 
5

Sử dụng as để làm cho nó trở nên dễ đọc hơn ble với cùng chức năng.

Func(null as Class1); 
Các vấn đề liên quan