我有这个函数:
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行没问题,而第2行在编译时就报错了。
从第2行抛出的异常是:
运算符“+”不能应用于类型“T”和“T”的操作数
所以,我们需要创建一个运算符重载。好的,到目前为止一切顺利。
但第1行呢?y
岂不也需要动态转换?
((dynamic)x + (dynamic)y);
我知道它在运行时被计算,但为什么C#编译器接受第1行中的+
运算符(即错误地假设T可以与其他东西+
)?
result
的值是多少?是“3”还是“12”?我猜它在进行字符串拼接。 - ServyT
是int
时它会进行字符串连接? - LukeH