我有这个功能:
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 可以是+
其他东西)?