* ПОЖАЛУЙСТА, СМ. КОНЕЦ ДЛЯ ВАЖНОГО РЕДАКТИРОВАНИЯ *
По различным причинам у меня есть что-то вроде:
delegate void Task(QueueTask queueTask);
delegate void QueueTask(Task task);
Использование Visual Studio Express2008 это работает более или менее хорошо, за исключением лямбда-выражений, которые не могут быть выведены, если я попытаюсь вызвать и вызвать queueTask () в функции без явной помощи:
void MyTask(QueueTask queueTask)
{
queueTask(qt => {}); // fails with queueTask doesn't take 1 parameter?
}
Это работает, хотя:
void MyTask(QueueTask queueTask)
{
queueTask((QueueTask qt) => {});
}
Это не огромная проблема, и я знаю, что, возможно, я мог бы также уйти, передав вместо этого другой объект, содержащий делегат, но мне было любопытно, если бы был способ заставить его работать как его стенды?
Спасибо.
* ВАЖНОЕ РЕДАКТИРОВАНИЕ НИЖЕ *
Кажется, только если я помещаю класс TaskPool2 в отдельную сборку, я получаю ошибку компиляции !?
namespace Test
{
public class TaskPool2
{
public delegate void QueueTask(Task task);
public delegate void Task(QueueTask queueTask);
public void Queue(Task task) { }
}
}
namespace MyApp
{
class Program
{
static void SomeFunc()
{
Test.TaskPool2 taskPool = new Test.TaskPool2();
taskPool.Queue(queue => { Console.WriteLine("A"); queue(q => Console.WriteLine("C")); });
}
}
}
Да, это несколько запутанно!