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