我有三个继承自类的类,因为我希望将这些对象视为基类:
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对象数组。
答案 0 :(得分:3)
这只是一个错字。你需要:
if (searchL is StringFind) { ... }
f
只是您传入的Find
个对象的数组,因此它只会满足f is Find[]
。
通常当我看到这样的代码时,我开始想办法避免它。而不是测试特定类型并改变行为,为什么不使用virtual
方法并通过重写派生类中的方法来定制行为?