gpt4 book ai didi

c# - 无法将泛型类型转换为接口(interface)

转载 作者:行者123 更新时间:2023-11-30 20:35:27 25 4
gpt4 key购买 nike

我有那些类型:

public interface ICommand {}

public class RemoveCommand<T>: ICommand
{
public int Id {get; set;}
}

public interface ICommandHandler<TCommand> where TCommand: ICommand
{
void HandleCommand(TCommand command);
}

public class RemoveCommandHandler<T> : ICommandHandler<RemoveCommand<T>>
{
public void HandleCommand(SoftRemoveCommand<T> command)
{
...
}
}

当我尝试使用 CaSTLe Windsor 解析我的 ICommandHandler 时,我收到了强制转换异常。所以我写了这个:

var obj = new RemoveCommandHandler<RemoveCommand<MyClass>>();
bool t1 = obj is ICommandHandler<RemoveCommand<MyClass>>; //return false!
bool t2 = obj.GetType().IsAssignableFrom(ICommandHandler<RemoveCommand<MyClass>>); //also false!

所以我的问题是:为什么我的 RemoveCommandHandler 不能从 ICommandHandler 分配?

最佳答案

您的通用类声明是 RemoveCommandHandler<T> .所以如果你有课 RemoveCommandHandler<RemoveCommand<MyClass>> ,这意味着您的 TRemoveCommand<MyClass> .

所以你应该改变RemoveCommandHandler<RemoveCommand<MyClass>>RemoveCommandHandler<MyClass>并且代码应该可以工作:

var obj = new RemoveCommandHandler<MyClass>();
bool t1 = obj is ICommandHandler<RemoveCommand<MyClass>>; // returns true

虽然第二次检查你需要换边:

bool t2 = typeof(ICommandHandler<RemoveCommand<MyClass>>).IsAssignableFrom(obj.GetType());  // returns true

关于c# - 无法将泛型类型转换为接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37908988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com