2011-08-12 33 views
0

我有,因为我想这些对象被当作基类,从一个类继承三类:测试,如果对象是类型SomeClass的怪异行为

public class Find 
{ 
} 

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

OK,然后我创建数组“查找“对象和我想要测试如果每个对象的类型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; 
} 

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

+1

发布文本代码,而不是截图。 –

回答

3

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

if (searchL is StringFind) { ... } 

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

通常当我看到类似的代码时,我开始想办法避免它。为什么不通过覆盖派生类中的方法来定制行为并定制行为,而不是测试特定类型并更改其行为?

+0

哇,对不起,大声笑。 –

+0

我想我会在接受你的解决方案后删除这个问题。 –

+0

@Tono如果你删除,代表拜拜再见:)当然,你自己。 – dlev