测试对象是否为SomeClass类型的奇怪行为

时间:2011-08-12 02:34:04

标签: c# inheritance polymorphism

我有三个继承自类的类,因为我希望将这些对象视为基类:

public class Find 
{
}

public class StringFind : Find
public class DateFind : Find
public class LongFind : Find

好吧然后我创建了一个'Find'对象数组,我想测试每个对象是否为StringFind,DateFind或LongFind类型,所以我创建了一些东西:

protected bool CompareUnion(params Find[] f)
{
    foreach (var searchL in f)
    {
        if (f is StringFind)
        {
            //do something
            var a = 3;
        }
    }

    return true;
}

如果StringFind来自该类,那么为什么f不能是StringFind类型?我认为视觉工作室是错误的,但我从来没有打破断点,我实际上是在创建一个StringFind对象数组。

1 个答案:

答案 0 :(得分:3)

这只是一个错字。你需要:

if (searchL is StringFind) { ... }

f只是您传入的Find个对象的数组,因此它只会满足f is Find[]

通常当我看到这样的代码时,我开始想办法避免它。而不是测试特定类型并改变行为,为什么不使用virtual方法并通过重写派生类中的方法来定制行为?