is&as關鍵字比較

is關鍵字用於檢查對象是否與給定類型兼容。注意了,這裏的is並不是“是”的意思,而是“兼容”。也就是說,如果被檢查對象能夠強制轉換成給定類型並不發生異常,那麼表示它們類型兼容。如果所提供的表達式非空,並且所提供的對象可以強制轉換爲所提供的類型而不會導致引發異常,則is表達式的計算結果將是 true;否則,發生異常時is表達式將返回false。is的使用方式:
if (obj is MyObject)
{
//………
}
如果已知表達式將始終是 true 或始終是 false,則 is 關鍵字將導致編譯時警告,但是,通常在運行時才計算類型兼容性。注意,is 運算符只考慮引用轉換、裝箱轉換和取消裝箱轉換。不考慮其他轉換,如用戶定義的轉換。特別注意:雖然int和double是類型兼容的,但是使用is運算符的結果卻是false,那是因爲is運算符只考慮引用轉換、裝箱轉換和拆箱轉換。在 is 運算符的左側不允許使用匿名方法。

引用轉換
is作用於對象引用時,將判斷被檢查對象變量是否是給定類型的派生類型。如果是派生類型,返回true;否則返回false。例如:
List list = new List();
if(list is IEnumerable) //這裏將返回true。因爲List實現了IEnumerable接口。
{
}

裝箱轉換
int i = 5;
if(i is Int32) {…} //這裏返回true。
if(i is Int16) {…} //這裏返回false,因爲int類型的包裝類型是Int32,而不是Int16。

拆箱轉換
Int32 int32 = new Int32();
if(int32 is int) {…} //這裏返回true。
if(int32 is long) {…} //這裏返回false,因爲Int32類型的原始類型是int,而不是long。

注意
1. 雖然Point與PointF、Size與SizeF、Rectangle與RectangleF可以相互轉換,但是使用is運算符的結果都是返回false,因爲is運算符不支持用戶自定義的類型轉換檢測。
2. int、long、double這些原始類型、數值類型雖然可以進行相互間的強制轉換,但是使用is運算符的結果都是返回false,也是因爲is運算符不支持這種原始類型轉換的檢測。
int i = 6; long l = 100;
if(i is long ) {…} //返回false
if(i is double) {…} //返回false
if(l is double) {…} //返回false
if(l is int ) {…} //返回false

C#中as和is關鍵字
一. as 運算符用於在兼容的引用類型之間執行某些類型的轉換。例如:
static void Main(string[] args)
{
object[] obj = new object[3];
obj[0] = new class1();
obj[1] = “hello”;
obj[2] = 10;

for (int i = 0; i < obj.Length; i++)
{
    string s = obj[i] as string;
    if (s != null)
    {
        Console.WriteLine(s);
    }
    else
    {
        Console.WriteLine("not a string");
    }
}

Console.ReadLine();

}
結果:
not a string
hello
not a string

class Base
{
public override string ToString()
{
return “Base”;
}
}
class Derived : Base
{ }

class Program
{
static void Main()
{

    Derived d = new Derived();

    Base b = d as Base;
    if (b != null)
    {
        Console.WriteLine(b.ToString());
    }

}

}
對於繼承類,允許把子類轉換成父類,但是不可以把父類轉換成子類,不同類之間,值類型不可轉換。
二.is檢查對象是否與給定類型兼容。
例如,下面的代碼可以確定對象是否爲 MyObject 類型的一個實例,或者對象是否爲從 MyObject 派生的一個類型:
複製代碼
if (obj is MyObject)
{
}
如果所提供的表達式非空,並且所提供的對象可以強制轉換爲所提供的類型而不會導致引發異常,則 is 表達式的計算結果將是 true。
如果已知表達式將始終是 true 或始終是 false,則 is 關鍵字將導致編譯時警告,但是,通常在運行時才計算類型兼容性。
不能重載 is 運算符。
請注意,is 運算符只考慮引用轉換、裝箱轉換和取消裝箱轉換。不考慮其他轉換,如用戶定義的轉換。
在 is 運算符的左側不允許使用匿名方法。lambda 表達式屬於例外。

class MyQuickSort
{
static void Main(string[] args)
{
class2 c2 = new class2();

    if (c2 is class1)
    {
        Console.WriteLine("Yes");
    }
    else
    {
        Console.WriteLine("No");
    }

    Console.ReadLine();
}

}

class class1
{
public override string ToString()
{
return “”;
}
}

class class2:class1
{

}

結果:Yes

發佈了28 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章