Рассмотрим код ниже. Выглядит как совершенно правильный код 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 #?
Обратите внимание, что это довольно неприятная ошибка для кто-то, кому очень нравится использовать лямбды и пытается создать библиотеку структур данных для будущего использования ... (я)
РЕДАКТИРОВАТЬ: удален ошибочный случай.
Я скопировал и удалил свой исходный проект до минимума, чтобы сделать это случилось. Это буквально весь код моего нового проекта.