В настоящее время на Github есть несколько помощников для Laravel 4. Если это все еще проблема с Aptana, я бы предложил использовать этот пакет: https://github.com/barryvdh/laravel-ide-helper
Я использую Eclipse, и это действительно помогло мне.
Класс делегата является базовым классом для типов делегатов. Однако только система и компиляторы могут явным образом быть производными от класса Delegate или от класса MulticastDelegate. Также недопустимо наследовать новый тип от типа делегата. Класс делегата не считается типом делегата ; это класс, используемый для получения типов делегатов. Источник - MSDN
Следовательно, необходимо явное приведение к типу, производному от делегата. Вы столкнетесь с этой конкретной ошибкой компилятора, когда передадите анонимный метод для параметра типа System.Delegate - к счастью, это редкий сценарий. Это слишком большая гибкость.
delegate void MyDelegate();
static void DoSomething_Flexible(Delegate d)
{ d.DynamicInvoke(); }
static void DoSomething_Usable(MyDelegate d)
{ d(); }
static void Main(string[] args)
{
// requires explicit cast else compile error Error "Cannot convert anonymous method to type 'System.Delegate' because it is not a delegate type
DoSomething_Flexible((MyDelegate) delegate { Console.WriteLine("Flexible is here!"); });
// Parameter Type is a .NET Delegate, no explicit cast needed here.
DoSomething_Usable(delegate { Console.WriteLine("Usable is here!"); });
}
Подробнее об этом на этой странице Яна Гриффита . (См. Пункты после заголовка Примечания)
Вам нужно указать компилятору, какой тип делегата нужно создать, поскольку Invoke
(и т. д.) просто возьмите Delegate
(а не что-то более конкретное).
Чтобы применить к самой большой аудитории, MethodInvoker
- удобный тип делегата
BeginInvoke((MethodInvoker) delegate(...) {...});
Однако ... BackgroundWorker.ProgressChanged
запускается в потоке пользовательского интерфейса автоматически, так что вам это даже не нужно.
Большую часть времени вы имеете дело либо с делегатом без параметров, либо с предикатом в эти случаи. Самый простой способ отсортировать это - привести ваш анонимный метод непосредственно к Action
или Predicate
соответственно; вам просто не нужно создавать собственный тип делегата для таких простых вещей.
Таким образом, у вас будет что-то вроде
BeginInvoke((Action)delegate(){YourCode.DoSomething();});
или
BeginInvoke((Predicate)delegate(object yourParameter){return YourCode.IsTheParameterSomething(yourParameter)});
HTH