无法将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]);
我查阅了所有关于它的帖子,但我不明白为什么?但这些答案并不能解决我的问题。
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);