Tôi giả định việc bổ sung (+
) toán tử được định nghĩa cho loại tùy chỉnh của bạn (MyType
trong ví dụ này).
Nếu có, bạn chỉ cần bỏ LHS và RHS của bài tập. Điều này là bắt buộc vì cả hai toán hạng phải là được biết đến các loại tại thời gian biên dịch để chọn quá tải toán tử chính xác. Đây là thứ được yêu cầu bởi ngôn ngữ tĩnh, mặc dù ngôn ngữ động (có thể là C# 4.0) có thể giải quyết vấn đề này.
((MyType)Myobject[i]) += (MyType)Myobject[j];
Cập nhật:
Một số phản ánh kỳ diệu có thể khắc phục vấn đề này trong C# 2.0/3.0 (với thiếu gõ động).
public static object Add(object a, object b)
{
var type = a.GetType();
if (type != b.GetType())
throw new ArgumentException("Operands are not of the same type.");
var op = type.GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public);
return op.Invoke(null, new object[] { a, b });
}
Lưu ý rằng điều này chỉ làm việc cho loại phi nguyên thủy. Đối với các kiểu nguyên thủy như int
, float
, v.v., bạn sẽ cần thêm câu lệnh chuyển đổi trên loại tự đúc các toán hạng và áp dụng toán tử cộng. Điều này là do quá tải của toán tử không thực sự được định nghĩa cho các kiểu nguyên thủy mà được xây dựng trong CLR.
Dù sao, hy vọng sẽ giải quyết được vấn đề của bạn.
Mảng Myobject được khai báo là gì? – ChrisF
Toán tử '+' được định nghĩa cho kiểu 'MyObject'? – Groo
đối tượng [] Myobject –