2011-08-12 14 views
13

ラムダ式、デリゲート、メソッドグループにバイナリ演算を適用できないようです。 Operator '>>=' cannot be applied to operands of type 'dynamic' and 'lambda expression'演算子 'op'は 'ダイナミック'と 'ラムダ式'のオペランドには適用できません

理由:

dynamic MyObject = new MyDynamicClass(); 
MyObject >>=() => 1 + 1; 

二行目

は私にエラーを与えて?

私のカスタムTryBinaryOperationオーバーライドによってオペレータ機能が決定されていませんか?

答えて

13

MyDynamicClassでは問題ありませんが、ラムダ式をダイナミックにすることはできません。しかし、これは動作するように見えるん:

dynamic MyObject = new MyDynamicClass(); 
Func<int> fun =() => 1 + 1; 
var result = MyObject >>= fun; 

TryBinaryOperationは次のようになります場合:

result = ((Func<int>) arg)(); 
return true; 

あなたはこれがバイナリどの操作を決定するためにbinder.Operationを使用することができます2.次にresultはなります。

+0

これは興味深く驚くべきことです。私は現時点ではモバイルですが、私はこれを後で見なければなりません! –

+0

@Marc Gravell:2番目のオペランドがintでなければならないという制約は、オペレータを定義するときにのみ適用され、オペレータを使用するときには適用されないと思います。 – ShdNx

+0

@ShdNx - 奇妙なことは、望むなら文字列を返すことができるということです。 – vcsjones

2
dynamic MyObject = new MyDynamicClass(); 
MyObject >>= new Func<int>(() => 1 + 1); 
関連する問題