c# - 将类转换为具有泛型类型的接口时出错(同时将泛型类型转换为其基类时)
问题描述
你好我有下一个问题铸造类。我有一个其他人继承的 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 question:Assigning List<Derived> as List<Base>,但由于我没有使用 IEnumerable 我不能这样做。
解决方案
相应的类是不变的,因此不可能进行强制转换!尝试重新考虑您的设计以消除对所需演员表的需求。
推荐阅读
- jquery - 获取单击复选框的 id 的方法不起作用
- yocto - Can't build bootlader and kernel image for my DE0-Nano-SoC board
- java - 在spring框架中显示自定义登录错误的问题
- python - 如何根据不同的年份和 column_name 计算百分比变化
- javascript - 角度 - 展平相同类型的对象数组
- php - Laravel 返回重定向在 iOS 容器中不起作用
- itext - 无法加载指定的文件。(itextsharp.LicenseKey)
- deep-learning - how does LSTM and GRU gates decide which word to keep in the memory
- ios - 拉动刷新文本放在tableview上方
- c# - 在停靠的 DockContent 文档中调整停靠窗格选项卡条文本和按钮的大小