问题描述
我希望这次检查成功。
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
语句执行