私はこの機能を持っています:
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 が+
何か他のものになる可能性があると誤って想定しています)。