は、私はこの機能を持っている:2行目はBANG(コンパイル時に)行くながらC#の動的な演算子ですか?
static void Func1<T>(T x, T y)
{
dynamic result = ((dynamic)x + y); //line 1
dynamic result2 = (x + y); //line 2
}
このfuncがFunc(1,2);
として実行することができますが、1行目は、OKです。
ライン2からスローされた例外は次のとおりです。
演算子「+」タイプ「T」のオペランドに適用することはできないと「T」
だから、私たちはオペレータを作成する必要があります過負荷。さて、これまでのところとても良い。
1行目はどうですか? y
でも動的キャストが必要なのでしょうか?
((dynamic)x + (dynamic)y);
私はそれが実行時に評価されていることを理解するが、なぜC#コンパイラは、(すなわち、誤ってTが何か他のものに+
ことができると仮定)行1で+
オペレータを受け入れていますか?
コードを実行した後の 'result'の値は何ですか?それは「3」か「12」ですか?私の推測では、文字列の連結を行っているということです。 – Servy
@Servy: 'T'が' int'のときに文字列の連結を行うと思うのはなぜですか? – LukeH