is就是處於對類型的判斷。返回true和false。若是一個對象是某個類型或是其父類型的話就返回爲true,不然的話就會返回爲false。另外is操做符永遠不會拋出異常。編程
代碼以下:c#
System.Boolean b1 = (o is System.Object);//b1 爲true
System.Boolean b2 = (o is Employee);//b2爲false
若是對象引用爲null,那麼is操做符老是返回爲false,由於沒有對象能夠檢查其類型,就像下面代碼同樣
![](http://static.javashuo.com/static/loading.gif)
if(o is Employee)
{
Employee e = (Employee) o;
//在if語句中使用e
}
在上面代碼中,其實clr對對象類型檢查了兩次:is操做首先檢查o所引用的對象是否和employee類型兼容。若是兼容,那麼在if語句內clr在執行轉換時又會檢查o是否爲一個Employee引用。這種編程範式十分常見,c#便提供了一種新的類型檢查,轉換方式。即as操做符,他能夠在簡化代碼的同時,提升性能。代碼以下:
Employee e = o as Employee;
if(e != null)
{
//在if語句中使用e
}
這種as操做即使等同於上面代碼,同時只進行了1次的類型檢查,因此提升了性能。若是類型相同就返回一個非空的引用,不然就返回一個空引用。
那麼這個時候咱們就很清楚的就知道何時該用is,什麼時該用as了:若是咱們測試對象的目的是肯定它是否屬於所需類型,而且如果的話就要當即轉換,這種狀況下as操做符效率更好,但有時咱們只是測試並不想當即轉換,可能根本就不會轉換,只是在對象實現了接口時,要將它加到一個列表中,這是is操做符就是一個更好的選擇。