Оператор с C #динамическим?

У меня есть эта функция:

static void Func1<T>(T x, T y)
{
    dynamic result = ((dynamic)x + y); //line 1
    dynamic result2 = (x + y);         //line 2
}

Эта функция может быть выполнена как Func(1,2);Однако строка 1 OK , а строка 2 переходит BANG(во время компиляции ).

Исключение из строки 2::

Оператор '+' не может быть применен к операндам типа 'T' и 'T'

Итак, нам нужно создать перегрузку оператора. Ладно, пока все хорошо.

А что насчет строки 1? Разве не нужно динамическое приведение также на y?

((dynamic)x + (dynamic)y);

Я понимаю, что он оценивается во время выполнения, но почему компилятор C #принимает оператор +в строке 1 (, т.е. ошибочно предполагает, что T может быть +чем-то другим )?

8
задан FishBasketGordo 4 May 2012 в 16:52
поделиться