微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 语句执行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。