2

这并没有做任何事情,只是导致需要进行不必要的强制转换(或者更确切地说,导致我拉下代码库并自己进行更改)。这样做有理由吗?

参考:

Codeplex 上的源代码

带有来源的博客发布

编辑 这是一个例子:

DoCommand = new RelayCommand<AsyncCallback>((callBack) =>
{
    Console.WriteLine("In the Action<AsyncCallback>");
    SomeAsyncFunction((async_result) =>
    {
        Console.WriteLine("In the AsyncCallback");
        callBack.Invoke(new MyAsyncResult(true));
    });
});

DoCommand.Execute((iasyncresult) => Console.WriteLine(iasyncresult.IsCompleted));
//Where MyAsyncResult is a class implement IAsyncResult that sets IsCompleted in the constructor
// This will cause the "cannot cast lambda as object" error
4

2 回答 2

6

因为ICommand不是通用的。ICommand的通用实现必须从接口进行转换,处理无效转换,并将转换实例转发给通用方法。

于 2011-06-09T16:56:03.300 回答
1

您的错误是由于 lambda 无法作为object. 而是尝试:

AsyncCallback callback = (iasyncresult) => Console.WriteLine(iasyncresult.IsCompleted);
DoCommand.Execute(callback);
于 2011-06-09T18:07:03.303 回答