无法将lambda表达式转换为类型';System.Delegate';调用时

本文关键字:System Delegate 调用 类型 lambda 表达式 转换 | 更新日期: 2023-09-27 18:22:25

我在时得到Cannot convert lambda expression to type 'System.Delegate'错误

this.Dispatcher.Invoke((Delegate)(() =>
            {
                this.Focus();
                if (!moveFocus)
                    return;
                this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }), DispatcherPriority.Background, new object[0]);

我查阅了所有关于它的帖子,但我不明白为什么?但这些答案并不能解决我的问题。

无法将lambda表达式转换为类型';System.Delegate';调用时

Lambda表达式不能直接转换为Delegate。但是,如果该方法需要某个类型的委托(例如Action),则可以使用lambda表达式而不进行强制转换。例如,在.Net 4.5中存在一个过载:
public void Invoke(Action callback,DispatcherPriority priority)

这意味着你可以这样做:

this.Dispatcher.Invoke(() =>
        {
            //...
        }, DispatcherPriority.Background);

但是在.Net 4或更早版本中不存在该过载。因此,您必须转换为Action:

this.Dispatcher.Invoke((Action)(() =>
    {
        ...
    }), DispatcherPriority.Background); 

请注意,我删除了new object[0]。不需要它,因为Action不接受任何参数。

不要强制转换为Delegate,而是转换为Action:

this.Dispatcher.Invoke((Action)(() =>
        {
            ...
        }), DispatcherPriority.Background, new object[0]);

您不需要将编译器隐式转换的lambda表达式转换为委托类型

this.Dispatcher.Invoke(() =>
            {
                this.Focus();
                if (!moveFocus)
                    return;
                this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }, DispatcherPriority.Background);