为什么RelayCommand <T> .Execute采用对象而不是T?

mic*_*ett 2 c# silverlight mvvm relaycommand

这没有做任何事情,但导致需要不必要的投射(或者更确切地说,导致我下拉代码库并自己进行更改).这样做是否有理由?

参考文献:

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
Run Code Online (Sandbox Code Playgroud)

小智 6

因为ICommand不是通用的.ICommand的通用实现必须从接口转换,处理无效的转换,并将转换实例转发到泛型方法.