Es gibt keine sofortige Antwort; Operatoren sind statisch und können nicht in Zwangsbedingungen ausgedrückt werden - und die vorhandenen Primitiven implementieren keine spezifische Schnittstelle (Kontrast zu IComparable [<T>], der verwendet werden kann, um größer als/kleiner als zu emulieren).
Jedoch; wenn Sie nur wollen, dass es funktioniert, dann in .NET 3.5 gibt es einige Optionen ...
Ich habe zusammen eine Bibliothek here, die mit Generika effizienten und einfachen Zugang zu den Betreibern ermöglicht - wie zum Beispiel:
T result = Operator.Add(first, second); // implicit <T>; here
Es kann als Teil von MiscUtil
Zusätzlich in C# 4.0 heruntergeladen werden, wird dies möglich über dynamic
:
static T Add<T>(T x, T y) {
dynamic dx = x, dy = y;
return dx + dy;
}
Ich hatte auch (an einem Punkt) eine .NET 2.0 Version, aber das ist weniger getestet. Die andere Option ist eine Schnittstelle wie
interface ICalc<T>
{
T Add(T,T)()
T Subtract(T,T)()
}
etc, zu schaffen, aber dann müssen Sie ein ICalc<T>;
durch alle Methoden zu übergeben, die chaotisch wird.
Haben Sie ein Beispiel, in dem Sie versuchen, um das zu benutzen? Ich kann nicht an etwas denken, das nützlich wäre? –
Eine generische "Sum" -Methode wäre ein einfaches Beispiel. T Summe (IEnumerable Sequenz); // wo T hat '+' Operator –
blackwing
möglich Duplikat von [Definieren Sie eine generische, die den + Operator implementiert] (http://stackoverflow.com/questions/3598341/define-a-generic-that-implements-the-operator) – Timwi