2011-08-12 36 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