以下のコードスニペットでは、64ビット列挙型のCreateDelegateを呼び出すとArgumentException "ターゲットメソッドへのバインドエラー"がスローされます。 32ビットのenumはうまく動作します。64ビットキャスト列挙関連のCreateDelegateが失敗するのはなぜですか?
誰かが私にその理由を教えてもらえますか?
class Test
{
public static void DoIt()
{
Func<int, int> f32 = i => i;
var d32 = (Func<int, E32>)Delegate.CreateDelegate(typeof(Func<int, E32>), f32.Method);
Func<long, long> f64 = i => i;
var d64 = (Func<long, E64>)Delegate.CreateDelegate(typeof(Func<long, E64>), f64.Method);
}
}
enum E32 { };
enum E64 { };
(この奇妙なコードにいくつかの状況では、それはこの答えに触発されています:https://stackoverflow.com/a/4026609/14582)
これは失敗になり、64ビットの列挙型についての特別な何か、結合引数で、おそらく実装されていないコードパスがあります一致するコード?それとも、32ビット列挙型がこのように動作するかどうかは不思議ですか?
bah、私はちょうど私がE64に ":long"を見逃していることに気づいた。結局、うまく動作します。これを閉じます。 – scobi
両方の列挙型は32ビットです。 'E64:long'を使って64ビットのenumを作ります。 – CodesInChaos