В приведенном ниже фрагменте кода при вызове CreateDelegate с 64-битным перечислением выдается исключение ArgumentException «Ошибка привязки к целевому методу». И все же 32-битный enum работает нормально.
Может кто-нибудь сказать мне, почему?
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-битное перечисление работает таким образом?