【发布时间】:2025-12-31 04:45:11
【问题描述】:
我有这种情况:
private IHandle<ICommand> Map<T>(IHandle<T> handle)
where T : ICommand
{
return (IHandle<ICommand>) handle;
}
该代码给出运行时错误。
但似乎IHandle<ICommand> 比IHandle<T> 更通用(因为where T : ICommand 约束)。我不明白为什么类型系统不能允许这种转换。我该怎么办?
【问题讨论】:
-
具体错误是什么?
-
@Clay07g 无法将 IncrementHandler' 类型的对象转换为类型 'IHandle`1[ICommand]'。
-
InvalidCastException
-
只有在
IHandle<T>与T是协变的情况下才会起作用,这意味着它只返回T并且永远不会将其作为参数或用于设置属性,并且定义必须是IHandle<out T>docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…