Ich gehe davon aus, die zusätzlich (+
auszuführen) Operator ist für Ihren benutzerdefinierten Typ definiert (MyType
in diesem Beispiel).
Wenn ja, müssen Sie einfach die LHS und RHS der Zuordnung zu werfen. Dies ist erforderlich, da beide Operanden zur Kompilierungszeit bekannte Typen sein müssen, um die richtige Operatorüberladung auszuwählen. Dies ist für statische Sprachen erforderlich, obwohl dynamische Sprachen (möglicherweise C# 4.0) dies beheben können.
((MyType)Myobject[i]) += (MyType)Myobject[j];
Update:
Einige Reflexion Magie, um dieses Problem in C# 2.0/3.0 (mit einem Mangel an dynamischer Typisierung) erhalten können.
public static object Add(object a, object b)
{
var type = a.GetType();
if (type != b.GetType())
throw new ArgumentException("Operands are not of the same type.");
var op = type.GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public);
return op.Invoke(null, new object[] { a, b });
}
Beachten Sie, dass dies funktioniert nur für nicht-primitive Typen. Für primitive Typen wie int
, float
usw. müssten Sie eine switch-Anweisung für den Typ hinzufügen, der die Operanden manuell umsetzt und den Additionsoperator anwendet. Dies liegt daran, dass Operatorüberladungen nicht wirklich für primitive Typen definiert sind, sondern in der CLR integriert sind.
Wie auch immer, hoffe, dass das Ihr Problem löst.
Worin wird das MyObject-Array als deklariert? – ChrisF
Ist der '+' Operator für den Typ von 'MyObject' definiert? – Groo
object [] Myobject –