2012-06-22 2 views
6

код пустышки:где op_addition в [INT, поплавка, двойной]

public object Addition(object a, object b) 
{ 
    var type = a.GetType(); 
    var op = type.GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public); 
    return op.Invoke(null, new object[] { a, b }); 
} 

Этот метод жалуется INT/поплавок/двойной, которые не могут найти эти методы (op_Addition).

Итак, как построить общий метод добавления?

+2

Вы можете сделать это с помощью 'dynamic', если у вас есть .net 4. – phg

ответ

8

Да, они не являются обычными операторами, которые существуют в качестве таких членов - вместо этого есть встроенные инструкции IL.

(То же самое почти верно для конкатенации строк, за исключением того, компилятор С # создает вызов string.Concat.)

Если вы используете C# 4 и .NET 4, самый простой подход заключается в использовании динамическая типизация:

public dynamic Addition(dynamic x, dynamic y) 
{ 
    return x + y; 
} 

для более ранних версий, вам необходимо для особых случаев определенных типов :(

это не ясно, что ваш контекст, но вы можете найти Марк Gravell-хинтересно.

+0

Спасибо @ jon, я использую моно версию, я думаю, что я должен использовать [int, double], чтобы плавать сначала с этими типами. – Vontio

+0

@ Sam4Ever: Последние версии поддержки динамической типизации моно поддерживаются, я считаю ... –

Смежные вопросы