Я ожидаю, что перегрузка - ваш лучший вариант здесь:
string Add(object value, MyStruct1 expiration) {...}
string Add(object value, MyStruct2 expiration) {...}
Это даже более уместно, поскольку вы не можете создать подкласс структуры, поэтому only viable T
в вашем примере будет MyStruct1
и MyStruct2
- может а также есть конкретные методы, то.
Ограничение дженериков несколькими цитируемыми типами; не совсем - и даже если бы они были, название «Добавить» предполагает, что вы хотите использовать поддержку оператора, которой также нет в C # (3.0).
Однако в C # 4.0 здесь может быть опция dynamic
- это действует как оптимизированная форма утки; вы не получите поддержку компилятора (проверка и т. д.), но это должно работать. Вы бы применили dynamic
внутри метод:
string Add<T>(object value, T expiration) where T : struct {
dynamic valueDyn = value;
valueDyn += expiration; // or similar
// more code
}
Другой вариант (в .NET 3.5) - использовать поддержку Operator
в MiscUtil , используя Operator.Add
или Operator.AddAlternative
.