К сожалению, очень трудно убедить компилятор об определенных реализациях T. Один (противный) подход должен бросить для возражения в середине (обратите внимание, что это упакует и распакует типы значения):
int i = (int)(object)this.value;
i++;
this.value = (T)(object)i;
Ужасный, но это работает. В.NET 3.5 у меня есть некоторые лучшие обертки для универсальной арифметики, здесь . Класс Оператора является частью MiscUtil; на самом простом уровне я подозреваю, что AddAlternative работал бы очень хорошо:
this.value = Operator.AddAlternative(this.value, 1);
Это должно вывести неявный < T, int> автоматически, или можно добавить их сами:
this.value = Operator.AddAlternative(this.value, 1);
Преимущество : Это предпочтительно для исходного кода, поскольку он на самом деле не заботится об оригинале T - он будет работать на любой тип (даже Ваше собственное), который поддерживает "T + (T, интервал)".
я думаю, что существует также ChangeType, скрывающийся вокруг где-нибудь там...
[редактирование] Collin K и другие делают допустимое замечание об архитектурных последствиях - но быть прагматичным существуют времена, когда T действительно имеет значение так очень..., но я согласился бы с предотвращением этого типа специализации если действительно необходимый. Это сказало (согласно моему комментарию к сообщению Collin), способность выполнить вещи как основная арифметика (инкремент, подразделение Int32, и т.д.) на (например), Matrix< T> [для T в десятичном/плавающем/международном/двойном/и т.д.] часто очень ценно.
Вы можете сделать это наоборот; откройте рабочий элемент и добавьте ссылку на соответствующий набор изменений. При использовании шаблонов рабочего элемента по умолчанию:
Конечно, он не скажет «Решено с набор изменений XXX "в истории рабочего элемента, но рабочий элемент будет отображаться в списке связанных рабочих элементов набора изменений.