У меня есть эта функция:
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 может быть +
чем-то другим )?