C# Generika lassen sich nicht addieren?
public class Addition<t>
{
public t Addieren(t x, t y)
{
return x+y;
}
}
Operator + cannot be applied to operands of type t and t
Kann man keine generischen Additionsmethoden erstellen? C#
4 Antworten
Für den generischen Typ t weiß der Compiler halt nicht, wie eine Addition definiert ist.
Was ist, wenn t etwas ist, für das kein Operator + existiert?
Tier + Tier? Schwein + Nashorn?
Du musst also entweder für t den + Operator überladen, oder über ein where constraint den Typ auf jene beschränken, für die Addition definiert ist.
Du musst also entweder für t den + Operator überladen
Das geht nicht.
über ein where constraint den Typ auf jene beschränken, für die Addition definiert ist
Das geht schon, ist aktuell aber ziemlich sinnlos, da man für sowas eine eigene Basisklasse (braucht man für den Operator) schreiben und für die Werte entsprechende Ableitungen verwenden muss - einfach int oder double geht nicht.
Das soll sich aber ändern, wenn es statische Interface-Member (wie Operatoren) gibt, dann kann man dieses Interface als Constraint benutzen und anschließend auf die darin definierten statischen Member zugreifen.
T kann alles sein, auch bool. Bool + bool ist aber nicht möglich, deshalb wird es nicht gehen denke ich
Kann man keine generischen Additionsmethoden erstellen? C#
Das funktioniert so natürlich nicht, da der Typ nunmal generisch ist und der Compiler nicht jeden Typen addieren kann.
Du kannst + Operatoren überladen - unär oder binär - und somit selbst definieren, was dann passieren soll.
Wann genau nutzt man denn dann generische Klassen und Methoden in der Praxis?
Du brauchst ein Typargument, das auch addierbar ist.