c# – 检查对象是否为T的子类的扩展方法
发布时间:2020-12-15 18:12:47 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个扩展方法来检查对象是否是T的子类. 这是我做的,但不被视觉工作室接受. public static bool IsChildOfT(this object obj){ return (typeof(obj).IsSubclassOf(typeof(T)));}[Test()]public void IsChildOfTest(){ var dog = new Dog(); var
我正在尝试编写一个扩展方法来检查对象是否是T的子类.
这是我做的,但不被视觉工作室接受. public static bool IsChildOf<T>(this object obj) { return (typeof(obj).IsSubclassOf(typeof(T))); } [Test()] public void IsChildOfTest() { var dog = new Dog(); var isAnimal = dog.IsChildOf<Animal>(); Assert.That(isAnimal); } 知道我怎么写这个? 解决方法
你可以使用is.但请注意,它与IsSubclassOf不完全相同.有关详细信息,请参阅Jeppe的优秀评论,我也在下面举例说明.
另外,我不认为Java出于某种原因允许在这种通用情况下使用等效的instanceof,但在C#中它是可以的.即: public static bool IsChildOf<T>(this object obj) { return obj is T; } 然后这使得它变得如此微不足道,以至于读者使用扩展方法比使用扩展方法更加困惑.如果您直接使用它,那么您的测试将如下所示: [Test()] public void IsChildOfTest() { var dog = new Dog(); var isAnimal = dog is Animal; Assert.That(isAnimal); } is和IsSubclassOf之间的差异之一的示例: [Test] public void IsChildOfTest() { var dog = new Dog(); Assert.False(dog.GetType().IsSubclassOf(typeof(Dog))); Assert.True(dog is Dog); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |