2012-06-22 34 views
6

đang Dummy:đâu op_addition trong [int, float, double]

public object Addition(object a, object b) 
{ 
    var type = a.GetType(); 
    var op = type.GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public); 
    return op.Invoke(null, new object[] { a, b }); 
} 

Phương pháp này phàn nàn với int/float/đôi, mà không thể tìm thấy những phương pháp (op_Addition).

Vậy làm thế nào để xây dựng một phương pháp bổ sung chung?

+2

Bạn có thể thực hiện điều này bằng 'động', nếu bạn có .net 4 khả dụng. – phg

Trả lời

8

Có, chúng không phải là toán tử tùy chỉnh tồn tại dưới dạng thành viên như vậy - thay vào đó, có các hướng dẫn IL tích hợp.

(Điều này cũng gần đúng đối với chuỗi nối, ngoại trừ có sự biên dịch C# xây dựng một cuộc gọi đến string.Concat.)

Nếu bạn đang sử dụng C# 4 và .NET 4, cách tiếp cận đơn giản nhất là sử dụng gõ động:

public dynamic Addition(dynamic x, dynamic y) 
{ 
    return x + y; 
} 

Đối với phiên bản trước đó, bạn sẽ cần phải đặc biệt hợp cụ thể một số loại :(

Nó không rõ ràng những gì hoàn cảnh của bạn, nhưng bạn có thể thấy Marc Gravell của article on generic operators thú vị.

+0

Cảm ơn @ jon, tôi đang sử dụng phiên bản mono, tôi nghĩ rằng tôi nên cast [int, double] để nổi lên đầu tiên với các loại này. – Vontio

+0

@ Sam4Ever: Các phiên bản gần đây của hỗ trợ nhập liệu năng động mono, tôi tin rằng ... –

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