Невозможно сделать это только с помощью дженериков, поскольку они не поддерживают такие операторы, как +, /, -, *
. Для этого вам нужно ввести слой абстракции в форме, скажем, интерфейса или лямбда-выражения для обеспечения операции.
Например
class Foo<T> {
Func<T, float, T> _multiplyFunc;
public Foo(Func<T, float, T> multiplyFunc) {
_multiplyFunc = multiplyFunc;
}
public T DoFoo(T bar) {
float aFloatValue = 1.0f;
return _multiplyFunc(bar, aFloatValue);
}
}
Теперь во время построения Foo<T>
вы можете сказать, как умножить на float
тип
var f = new Foo<MyType>((x, y) => x * y);