Ich entwickle also etwas, das auf dynamic
Variablen mit C# 4. Und ich bin in einer Situation, in der ich zwei Variablen habe a
y b
und ich conozca die entweder a.Foo(b)
o b.Foo(a)
definiert ist. Allerdings weiß ich nicht, welche, so dass ich im Moment etwas wie dieses verwenden:
dynamic a, b, result;
...
try
{
result = a.Foo(b);
}
catch
{
result = b.Foo(a);
}
Das ist furchtbar (es ist nicht nur unelegant, sondern auch sehr langsam, da die Wahrscheinlichkeit, dass ein Fehler auftritt, etwa 0,5 beträgt). Exception
und erzeugt einen Stack-Trace). Ich könnte Reflexion verwenden, aber ich erwarte, dass das auch ziemlich langsam sein würde.
Gibt es also einen besseren Weg?
Das ist also das Problem... aber ich werde auch den Kontext erklären, da ich denke, dass es eine gute Möglichkeit gibt, die ganze Situation besser zu handhaben. Im Wesentlichen baue ich Ausdruck Bäume (mit meiner eigenen Knotenstruktur), die mit vielen verschiedenen Datentypen arbeiten.
Wenn Sie den Ausdruck 1+'2'
die a
y b
Werte sind die Operanden 1
y '2'
. Wenn ich die +
Knoten, der die Unterbäume a
y b
kann jeder Operand eine Methode enthalten, die Add
den Typ des anderen Operanden zu. Das heißt, entweder a.Add(b)
implementiert ist oder b.Add(a)
umgesetzt wird.
Ich kann mir nur vorstellen, Reflexion zu verwenden, die obige Methode, oder doppelte Funktionen in beiden Arten von a
y b
um die Symmetrie zu modellieren.