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

エラーは、ラムダをとして渡すことができないことが原因objectです。代わりに試してください:

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