我有這樣的功能:運算符與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是行本功能可被執行,而線2進入BANG(在編譯時間)。
從2號線引發的異常是:
操作「+」不能應用於類型「T」的操作數和「T」
所以,我們需要創建一個運營商超載。好的,到目前爲止這麼好。
但是第1行呢?它不應該也需要y
上的動態演員陣容嗎?
((dynamic)x + (dynamic)y);
我明白這是在運行時進行評估,但爲什麼C#編譯器接受1號線的運營商+
(即錯誤地認爲,T可以+
別的東西)?
執行代碼後'result'中的值是多少?是'3'還是'12'。我的猜測是它正在做字符串連接。 – Servy
@Servy:當'T'是'int'時,是什麼讓你認爲它會進行字符串連接? – LukeH