Thật không may, rất khó để thuyết phục trình biên dịch về việc triển khai T cụ thể. Một cách tiếp cận (khó chịu) là truyền đến đối tượng ở giữa (lưu ý điều này sẽ có giá trị hộp và giá trị unbox):
int i = (int)(object)this.value;
i++;
this.value = (T)(object)i;
Xấu xí nhưng nó hoạt động. Trong .NET 3.5 Tôi có một số trình bao bọc tốt hơn cho số học chung, here. Lớp Operator là một phần của MiscUtil; ở mức đơn giản nhất, tôi nghi ngờ AddAlternative sẽ làm việc rất tốt:
this.value = Operator.AddAlternative(this.value, 1);
này nên suy ra tiềm ẩn < T, int > tự động, hoặc bạn có thể thêm chúng mình:
this.value = Operator.AddAlternative<T,int>(this.value, 1);
Benefit: Điều này là thích hợp hơn với mã gốc vì nó không thực sự quan tâm đến T ban đầu - nó sẽ làm việc cho bất kỳ loại nào (thậm chí là của riêng bạn) có hỗ trợ "T + (T, int)".
Tôi nghĩ đó cũng là một ChangeType ẩn xung quanh đâu đó trong đó ...
[sửa] Collin K và những người khác làm cho một nhận xét có giá trị về ý nghĩa kiến trúc - nhưng là thực tế có những lúc T thực sự quan trọng lắm ... nhưng tôi đồng ý tránh loại chuyên môn này trừ khi thực sự cần. Điều đó nói rằng (theo nhận xét của tôi về bài viết của Collin), khả năng thực hiện những thứ như số học cơ bản (gia tăng, phân chia Int32, vv) trên (ví dụ) Ma trận <T> [cho T trong thập phân/float/int/double/vv] thường có giá trị cao.
Nguồn
2008-10-05 20:51:06
Điều này không hoạt động, trình biên dịch không thể xác định ToInt32 quá tải để sử dụng. – AnthonyWJones
Có, nó hoạt động tốt. Dán nó vào VS và thử nó. – user25306