'Delegate' System.Action 'не принимает 0 аргументов.' Это ошибка компилятора C # (лямбда-выражения + два проекта)?

Рассмотрим код ниже. Выглядит как совершенно правильный код C #, верно?

//Project B
using System;
public delegate void ActionSurrogate(Action addEvent);
//public delegate void ActionSurrogate2();
// Using ActionSurrogate2 instead of System.Action results in the same error
// Using a dummy parameter (Action<double, int>) results in the same error

// Project A
public static class Class1 {
    public static void ThisWontCompile() {
        ActionSurrogate b = (a) =>
                            {
                                a(); // Error given here
                            };
    }
}

Я получаю ошибку компилятора «Делегировать действие» не принимает 0 аргументов ». в указанном месте с помощью компилятора (Microsoft) C # 4.0. Обратите внимание, что вы должны объявить ActionSurrogate в другом проекте, чтобы эта ошибка проявилась.

Это становится более интересным:

// Project A, File 1
public static class Class1 {
    public static void ThisWontCompile() {
        ActionSurrogate b = (a) => { a(); /* Error given here */ };
        ActionSurrogate c = (a) => { a(); /* Error given here too */ };
        Action d = () => { };
        ActionSurrogate c = (a) => { a(); /* No error is given here */ };
    }
}

Я наткнулся здесь на ошибку компилятора C #?

Обратите внимание, что это довольно неприятная ошибка для кто-то, кому очень нравится использовать лямбды и пытается создать библиотеку структур данных для будущего использования ... (я)

РЕДАКТИРОВАТЬ: удален ошибочный случай.

Я скопировал и удалил свой исходный проект до минимума, чтобы сделать это случилось. Это буквально весь код моего нового проекта.

42
задан Alex ten Brink 17 December 2010 в 01:48
поделиться