2012-04-03 47 views
0

可能重複:
Casting vs using the 'as' keyword in the CLR
Cast then check or check then cast?檢查某個類型時,使用「is」還是「as」還是「as」和空檢查更好?

假設下面的代碼設置:

public class BaseFoo { ... } 
public class DerivedFoo : BaseFoo { ... } 

現在,我有一個BaseFoo對象命名foo可能會或可能不會實際上是DerivedFoo。如果它是一個DerivedFoo對象,我需要添加幾個步驟來處理它。是否有任何非主觀理由,更喜歡其它上述下面的代碼段中的一種:1

選項:

if (foo is DerivedFoo) 
{ 
    var dfoo = foo as DerivedFoo; 
    // Continue processing... 
} 

選項2:

var dfoo = foo as DerivedFoo; 
if (dfoo != null) 
{ 
    // Continue processing... 
} 

個人而言,我認爲選項1更具可讀性和簡潔性,但我想知道是否有任何性能差異或行爲差異,我錯過了。

+2

這是一個愚蠢的玩笑,去選擇2,否則你做兩倍的工作 – BrokenGlass 2012-04-03 17:41:28

+0

愚人?我找不到它。 – FishBasketGordo 2012-04-03 17:42:01

+1

這聞起來很多...具體來說,它打破了替代原則。 – 2012-04-03 17:42:03

回答

-3

要檢查一個對象是否屬於某個類,運算符是「是」。

if (object is ClassName) 
{ } 

如果是則返回平坦值,如果爲空或trully爲假則返回false。

+0

這並沒有解決方案2的所有問題 – 2012-04-03 17:48:46

+0

... 。 真的嗎?他問什麼是最可行的性能和我的答案是所需要的。 – 2012-04-03 17:50:37

+0

下一次備份你說的@ niklas-b .... if(object ClassName)既可以應用到Basefoo也可以應用到DerivedFoo – 2012-04-03 17:54:33

相關問題