gpt4 book ai didi

c# - 将类转换为其具有泛型类型的接口(interface)时出错(同时将泛型类型转换为其基类)

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:03 26 4
gpt4 key购买 nike

你好,我有下一个问题类型转换类。我有一个其他人继承的任务类

public class Quest{}

public class QuestChild: Quest{}

我使用一个通用的验证器来接收某种类型的任务

public interface IQuestValidator<in T> where T:Quest
{
bool IsCompleted(T quest);

bool IsFailed(T quest);
}

public class QuestValidator<T>: IQuestValidator<T> where T: Quest
{
public bool IsCompleted(T quest)
{
return false;
}

public bool IsFailed(T quest)
{
return true;
}
}

当我为 Quest 的每个派生类创建验证器时,我想将它强制转换为它的 Base 类,如下所示:

    IQuestValidator<Quest> c = (IQuestValidator<Quest>)new QuestValidator<QuestChild>();

但是当我执行这一行时,它返回错误“InvalidCastException”。为什么会发生这种情况,或者我该如何解决才能正确转换?

注:好像和这个问题很相似C# variance problem: Assigning List<Derived> as List<Base> ,但由于我没有使用 IEnumerable,所以我不能这样做。

最佳答案

相应的类是不变的,所以不可能进行转换!尝试重新考虑您的设计,以消除对所需类型转换的需求。

关于c# - 将类转换为其具有泛型类型的接口(interface)时出错(同时将泛型类型转换为其基类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882988/

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