c# - c# 如何直接比较泛型类的“基类型”?
问题描述
我希望这个检查成功。
SerializableObject<GameObject> gameObject = new SerializableObject<GameObject>();
SerializableObject<Sprite> sprite = new SerializableObject<Sprite>();
// this is the check I want to have succeed,
// because both dog and cat share the SerializableObject generic type.
if (gameObject *has same base type as* sprite )
{
// do something
}
有没有办法做到这一点?
编辑:在对类型泛型使用 Animal 的混乱用法进行反馈后,让我改用我的具体示例。
解决方案
这应该适合你。它检查类型是泛型的并且底层泛型类型是否相同:
public class GameObject { }
public class Sprite { }
public class SerializableObject<T> where T : class {}
然后检查它们之间的关系:
var game = new SerializableObject<GameObject>();
var sprite = new SerializableObject<Sprite>();
var typeGame = game.GetType();
var typeSprite = sprite.GetType();
if (typeGame.IsGenericType && typeSprite.IsGenericType &&
typeGame.GetGenericTypeDefinition() == typeSprite.GetGenericTypeDefinition())
{
Debug.WriteLine($"{nameof(game)} and {nameof(sprite)} are related through {nameof(SerializableObject<T>)}");
}
您应该看到WriteLine
语句执行
推荐阅读
- docker - Jenkins 在容器内构建 - 无法将 maven 工件部署到工件并获得 401 未经授权的错误
- jmeter - 处理控制器时面临的问题
- python - 在 python Plotly 仪表板中的绘图内拖动一个圆圈
- c# - Microsoft Dynamics CRM 注释实体错误的“创建者”字段值
- python - 在 aws-s3 中创建大压缩文件并返回到 S3 python
- c - 如何使用 bison/flex 在 C 代码的头文件中解析自定义数据类型的类型?
- javascript - 旋转卡动画故障
- reactjs - 我尝试从 firestore 获取一次数据,但我为集合中的每个文档接收三次
- javascript - 即使在浏览器中禁用 JavaScript 也提交 Ajax 表单?
- firebase - Flutter/Firebase:如何减少对推送/弹出调用的 StreamBuilder 调用?