Итак, я разрабатываю что-то, что работает с dynamic
переменными, используя C # 4. И я нахожусь в ситуации, когда у меня есть две переменные a
и b
, и я знаю , что либо a.Foo(b)
или b.Foo(a)
определяется. Однако я не знаю, какой именно сейчас я использую что-то вроде этого:
dynamic a, b, result;
...
try
{
result = a.Foo(b);
}
catch
{
result = b.Foo(a);
}
Что ужасно (не только неэлегично, но и очень медленно, так как есть вероятность 0,5 * поднять Exception
и произвести трассировку стека). Я мог бы использовать отражение, но я ожидаю, что это будет довольно медленно.
Так есть ли лучший способ?
Так вот в чем проблема ... но я также объясню контекст, так как думаю, что есть хороший шанс, что есть лучший способ справиться со всей ситуацией. По сути, я строю деревья выражений (используя собственную структуру узлов), которые работают со многими различными типами данных.
Если вы считаете выражение 1+'2'
, значения a
и b
являются операндами 1
и '2'
. Если я хочу оценить узел +
, который имеет поддеревья a
и b
, то любой операнд может содержать метод для Add
типа другого операнда. То есть, либо a.Add(b)
реализовано, либо b.Add(a)
реализовано.
Я могу думать только об использовании отражения, описанного выше метода, или создании дублирующих функций в обоих типах a
и b
для моделирования симметрии.