残念ながら、特定の T 実装についてコンパイラを納得させるのは非常に困難です。1つの(厄介な)アプローチは、途中でオブジェクトにキャストすることです(これにより、値の型がボックス化およびボックス化解除されることに注意してください):
int i = (int)(object)this.value;
i++;
this.value = (T)(object)i;
醜いが、それは動作します。.NET 3.5 では、一般的な算術演算用のより優れたラッパーがいくつかあります。Operator クラスはMiscUtilの一部です。最も単純なレベルでは、AddAlternative が非常にうまく機能すると思います。
this.value = Operator.AddAlternative(this.value, 1);
これにより、暗黙的な <T,int> が自動的に推測されるはずです。または、自分で追加することもできます。
this.value = Operator.AddAlternative<T,int>(this.value, 1);
利点: これは元の T を実際には気にしないため、元のコードよりも好ましいです。"T +(T,int)" をサポートする任意の型 (自分の型であっても) で機能します。
そこのどこかに隠れているChangeTypeもあると思います...
[編集] Collin K と他の人々は、アーキテクチャの意味について有効な発言をしています - しかし、実用的であるため、T が実際にそれほど重要な場合があります... しかし、本当に必要でない限り、この種の特殊化を避けることに同意します. つまり、(Collin の投稿に対する私のコメントによると)、(たとえば) Matrix<T> [for T in decimal/float/int/double/など] は、多くの場合、非常に価値があります。