c# – 检查对象是否为T的子类的扩展方法

前端之家收集整理的这篇文章主要介绍了c# – 检查对象是否为T的子类的扩展方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个扩展方法来检查对象是否是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);
}
原文链接:https://www.f2er.com/csharp/97813.html

猜你在找的C#相关文章