У меня также была эта проблема, и я думаю, что нашел лучшее решение (при условии, что перегруженной версии вашего метода недостаточно):
Смешивание Type1
и Type2
без каких-либо параллелей не имеет никакого смысла, как уже было написано. Таким образом, должен быть любой метод или свойство, к которому осуществляется доступ для обоих типов объектов. Чтобы убедиться, что эти методы или свойства доступны для вашего объекта, сгруппируйте Type1
и Type2
, создав интерфейс MyInterface
и реализовав его по Type1
и Type2
:
interface MyInterface {
void MyCommonMethod();
bool MyCommonProperty { get; }
}
class Type1 : MyInterface {
void MyCommonMethod() {
// TODO: Implement it for Type1
}
bool MyCommonProperty {
get {
// TODO: Implement it for Type1
}
}
}
class Type2 : MyInterface {
void MyCommonMethod() {
// TODO: Implement it for Type2
}
bool MyCommonProperty {
get {
// TODO: Implement it for Type2
}
}
}
Теперь, чтобы переписать ваш метод Foo
, чтобы принять Type1
и Type2
, ограничение T
должно быть MyInterface
объектом:
public void Foo<T>(T number) where T : MyInterface
{
throw new NotImplementedException();
}
Я думаю, это может быть полезно. :)