将类强制转换为具有泛型类型的接口(同时将泛型类型转换为其基类)

问题描述 投票:2回答:1

你好,我有下一个问题铸造类。我有一个其他人继承的Quest类

public class Quest{}

public class QuestChild: Quest{}

我使用一个通用的验证器,期望接收某种类型的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 clase,如下所示:

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

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

注意:它似乎与C# variance problem: Assigning List<Derived> as List<Base>这个问题类似,但由于我没有使用IEnumerable,我不能这样做。

c# casting
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.