我很难让这个通用的约束生效。
下面有两个界面。
我希望能够将icommandhandlers tresult类型约束为仅使用实现icommandresult的类型,但icommandresult有自己的约束,需要提供这些约束。icommandresult可能会从其result属性返回值或引用类型。我是不是漏掉了一些显而易见的东西?谢谢。

public interface ICommandResult<out TResult>
{
    TResult Result { get; }
}

public interface ICommandHandler<in TCommand, TResult>  where TCommand : ICommand
                                                        where TResult : ICommandResult<????>
{
    TResult Execute( TCommand command );
}

最佳答案

你可以把你的界面改成这个(在我看来比较干净):

public interface ICommandHandler<in TCommand, TResult> where TCommand : ICommand
{
    ICommandResult<TResult> Execute( TCommand command );
}

或者可以将ICommandResult<TResult>的类型参数添加到泛型参数列表中:
public interface ICommandHandler<in TCommand, TCommandResult, TResult>
    where TCommand : ICommand
    where TCommandResult: ICommandResult<TResult>
{
    TCommandResult Execute( TCommand command );
}

08-05 04:46