Desafortunadamente, es muy difícil convencer al compilador sobre implementaciones T específicas. Uno de los enfoques (desagradable) es echar a oponerse en el medio (tenga en cuenta que esto caja y tipos de valor Unbox):
int i = (int)(object)this.value;
i++;
this.value = (T)(object)i;
feo, pero funciona. En .NET 3.5 tengo algunos mejores contenedores para la aritmética genérica, here. La clase Operator es parte de MiscUtil; Al nivel más simple, sospecho AddAlternative funcionaría muy bien:
this.value = Operator.AddAlternative(this.value, 1);
Esto debe inferir la implícita < T, int > automáticamente, o se les puede añadir a sí mismo:
this.value = Operator.AddAlternative<T,int>(this.value, 1);
Beneficio: Esto es preferible al código original, ya que en realidad no le importa la T original; funcionará para cualquier tipo (incluso el suyo) que admita "T + (T, int)".
Creo que también es un changetype escondido en algún lugar allí ...
[editar] Collin K y otros hacen una observación válida acerca de las implicaciones arquitectónicas - pero siendo pragmática hay momentos en que el T realmente hace Importa mucho ... pero estaría de acuerdo con evitar este tipo de especialización a menos que realmente sea necesario. Dicho esto (según mi comentario sobre la publicación de Collin), la capacidad de realizar cosas como la aritmética básica (incremento, división Int32, etc.) en (por ejemplo) una Matriz <T> [para T en decimal/float/int/doble/etc] a menudo es muy valioso.
Esto no funciona, el compilador no puede determinar qué sobrecarga ToInt32 usar. – AnthonyWJones
Sí, funciona bien. Pégalo en VS y pruébalo. – user25306