tôi có chức năng này:Toán tử có động C#?
static void Func1<T>(T x, T y)
{
dynamic result = ((dynamic)x + y); //line 1
dynamic result2 = (x + y); //line 2
}
func này có thể được thực hiện như Func(1,2);
Tuy nhiên, dòng 1 là OK, trong khi dòng 2 đi BANG (tại thời gian biên dịch).
Trường hợp ngoại lệ ném từ dòng 2 là:
Operator '+' không thể được áp dụng cho toán hạng kiểu 'T' và 'T'
Vì vậy, chúng ta cần tạo một nhà điều hành quá tải. Được rồi, cho đến nay rất tốt.
Nhưng còn dòng 1 thì sao? Không nên cần một dàn diễn viên năng động cũng trên y
?
((dynamic)x + (dynamic)y);
Tôi hiểu rằng nó đang được đánh giá trong thời gian chạy, nhưng tại sao các biên dịch C# chấp nhận +
nhà điều hành trong dòng 1 (ví dụ giả định sai T có thể được +
đến cái gì khác)?
Giá trị trong 'kết quả' sau khi thực thi mã là gì? Có phải '3' hay '12'. Tôi đoán là nó đang nối chuỗi. – Servy
@Servy: Điều gì khiến bạn nghĩ rằng nó sẽ nối chuỗi khi 'T' là' int'? – LukeH