Nie ma natychmiastowej odpowiedzi; operatory są statyczne i nie mogą być wyrażone w ograniczeniach - a istniejące prymitywy nie implementują żadnego konkretnego interfejsu (w przeciwieństwie do IComparable [<T>], który może być użyty do emulacji większego niż/mniejszy niż).
Jednak; jeśli po prostu chcesz go do pracy, to w .NET 3.5 istnieje kilka opcji ...
mam połączyć bibliotekę here który umożliwia wydajne i prosty dostęp do operatorów z rodzajowych - takich jak:
T result = Operator.Add(first, second); // implicit <T>; here
to można pobrać jako część MiscUtil
Ponadto w C# 4.0, to staje się możliwe poprzez dynamic
:
static T Add<T>(T x, T y) {
dynamic dx = x, dy = y;
return dx + dy;
}
Posiadałem również (w pewnym momencie) wersję .NET 2.0, ale jest to mniej testowane. Inną opcją jest stworzenie interfejsu takiego jak
interface ICalc<T>
{
T Add(T,T)()
T Subtract(T,T)()
}
etc, ale wtedy trzeba zdać ICalc<T>;
przez wszystkich metod, które dostaje bałagan.
masz przykład gdzie próbujesz korzystać z tego? Nie mogę wymyślić gdziekolwiek, co byłoby przydatne? –
Ogólna metoda "Sum" byłaby prostym przykładem. T Sum (IEnumerable sekwencji); // gdzie T ma operatora "+" –
blackwing
możliwy duplikat [Zdefiniuj ogólny, który implementuje operator +] (http://stackoverflow.com/questions/3598341/define-a-eneric-that-implements-the-operator) – Timwi