以下兩個語句都測試某些對象x
的類型是T
。應該注意性能方面有什麼區別嗎?'結果是T'還是'typeof(T).IsInstanceOfType(result)'?之間有明顯的區別嗎?
var result1 = x is T;
var result2 = typeof(T).IsInstanceOfType(x);
謝謝!
以下兩個語句都測試某些對象x
的類型是T
。應該注意性能方面有什麼區別嗎?'結果是T'還是'typeof(T).IsInstanceOfType(result)'?之間有明顯的區別嗎?
var result1 = x is T;
var result2 = typeof(T).IsInstanceOfType(x);
謝謝!
由於IsInstanceOfType
是一種需要使用object
的方法,因此值類型將被裝箱。另一方面,運營商is
將不會執行裝箱。
當您在編譯時知道T
時,使用第一種方法會更好,無論是作爲特定類型還是通用類型參數。第二種方法是當代碼在運行時獲得類型時的情況,因爲第一種方法不適用:
Type typeKnownAtRuntime = ...
var result2 = typeKnownAtRuntime.IsInstanceOfType(x); // This works
var incorrect = x is typeKnownAtRuntime; // This does not compile
你的意思是[盒裝](https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx)。你可能想詳細說明一下爲什麼這很糟糕。 –
是否有理由在'is'上使用'IsInstanceOfType'?你剛纔提出了一個很好的例子,現在我想知道爲什麼我會用前者。 – MarqueIV
@MarqueIV我剛剛編輯答案提到這一點。 – dasblinkenlight
Ooops !.錯字。糾正。並沒有特定的用途。只是一個好奇心型的問題。 – MarqueIV
爲什麼這次被拒絕? – MarqueIV