【发布时间】:2012-05-04 16:44:55
【问题描述】:
我有这个功能:
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 可以是 + 到其他东西)?
【问题讨论】:
-
执行代码后
result中的值是多少?是“3”还是“12”。我的猜测是它在进行字符串连接。 -
@Servy:是什么让你认为当
T是int时它会进行字符串连接?