【问题标题】:Error casting class to its interface with generic type (when also casting generic type to its base)使用泛型类型将类转换为其接口时出错(同时将泛型类型转换为其基类时)
【发布时间】:2019-09-16 21:00:47
【问题描述】:

你好我有下一个问题铸造类。我有一个其他人继承的 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 类,如下所示:

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

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

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

【问题讨论】:

标签: c# casting


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多