【问题标题】:Test if object is of type SomeClass strange behaviour测试对象是否属于 SomeClass 类型的奇怪行为
【发布时间】:2011-08-12 02:34:03
【问题描述】:

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

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 类型?我认为 Visual Studio 是错误的,但我从未遇到断点,实际上我正在创建一个 StringFind 对象数组。

【问题讨论】:

  • 发布文本代码,而不是屏幕截图。

标签: c# inheritance polymorphism


【解决方案1】:

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

if (searchL is StringFind) { ... }

f 只是你传入的Find 对象的数组,所以它只会满足f is Find[]

不过,通常当我看到这样的代码时,我会开始想办法避免它。与其测试特定类型并更改行为,为什么不使用virtual 方法并通过覆盖派生类中的方法来调整行为?

【讨论】:

  • 我想我会在接受你的解决方案后删除问题。
  • @Tono 没有问题。我们以前都曾因类似的事情撞过墙;至少现在有!
猜你喜欢
  • 2010-11-02
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
相关资源
最近更新 更多