C# 基礎(chǔ)之運(yùn)算符
更新時(shí)間:2013年09月25日 16:17:47 作者:
這篇文章介紹了C# 運(yùn)算符的基礎(chǔ)知識(shí),有需要的朋友可以參考一下
1、條件運(yùn)算符
條件運(yùn)算符(?:)也稱(chēng)為三元(目)運(yùn)算符,是if...else結(jié)構(gòu)的簡(jiǎn)化形式,可以嵌套使用。
int x = 1;
string s = x + ""; ;
s += (x == 1 ? "man" : "men");
Console.WriteLine(s);//輸出1man
2、checked和unchecked
byte b = 255;
{
b++;
}
Console.WriteLine(b.ToString());//輸出0
但是由于byte只能包含0-255的數(shù),所以++之后會(huì)導(dǎo)致b溢出。因此,如果把一個(gè)代碼塊標(biāo)記為checked,CLR就會(huì)執(zhí)行溢出檢查,如果發(fā)生溢出,就拋出來(lái)OverflowException異常。
如下所示:
byte b = 255;
checked
{
b++;
}
Console.WriteLine(b.ToString());//拋出OverflowException異常,算術(shù)運(yùn)算導(dǎo)致溢出
如果要禁止溢出檢查,可以標(biāo)記為unchecked:
byte b = 255;
unchecked
{
b++;
}
Console.WriteLine(b.ToString());//輸出0,不拋異常
3、is
is運(yùn)算符可以檢查對(duì)象是否與特定的類(lèi)型兼容。“兼容”表示對(duì)象是該類(lèi)型或者派生自該類(lèi)型。
string i = "hello i...";
if (i is object)
{
Console.WriteLine("i is an object...");//執(zhí)行了這句話(huà)
}
4、as
as運(yùn)算符用于執(zhí)行引用類(lèi)型的顯式類(lèi)型轉(zhuǎn)換(string 為引用類(lèi)型)。如果要轉(zhuǎn)換的類(lèi)型與指定的類(lèi)型兼容,轉(zhuǎn)換就會(huì)成功進(jìn)行;如果類(lèi)型不兼容,as運(yùn)算符就會(huì)返回Null。
string i = "hello i...";
if (i is object)
{
object obj = i as object;//顯式類(lèi)型轉(zhuǎn)換
Console.WriteLine(obj is string ? "obj is string..." : "obj is not string...");//輸出obj is string...
}
5、sizeof
sizeof運(yùn)算符可以確定stack中值類(lèi)型需要的長(zhǎng)度(單位是字節(jié)):
int byteSize = sizeof(byte);//輸出1
int charSize = sizeof(char);//輸出2
int uintSize = sizeof(uint);//輸出4
int intSize = sizeof(int);//輸出4
6、typeof
typeof運(yùn)算符常常會(huì)跟GetType()方法結(jié)合使用,來(lái)反射出類(lèi)的屬性、方法等。
Type intType = typeof(int);
System.Reflection.MethodInfo[] methodInfo = intType.GetMethods();
methodInfo.ToList().ForEach(x => Console.WriteLine(x.Name));//反射出int類(lèi)型的方法名
7、可空類(lèi)型和運(yùn)算符
如果其中一個(gè)操作數(shù)或兩個(gè)操作數(shù)都是null,其結(jié)果就是null,如:
int? a = null;
int? b = a + 4;//b = null
int? c = a * 5;//c = null
但是在比較可空類(lèi)型時(shí),只要有一個(gè)操作數(shù)為null,比較的結(jié)果就是false。但不能因?yàn)橐粋€(gè)條件是false,就認(rèn)為該條件的對(duì)立面是true。如:
int? a = null;
int? b = -5;
if (a >= b)
Console.WriteLine("a > = b");
else
Console.WriteLine("a < b");//會(huì)輸出這句話(huà)
8、空合并運(yùn)算符
例如:
int? a = null;//加問(wèn)號(hào),是為了能夠給Int型賦值為null
int b;
b = a ?? 1;
[csharp]
Console.WriteLine(b);//輸出1
a = 3;
b = a ?? 10;
Console.WriteLine(b);//輸出10
條件運(yùn)算符(?:)也稱(chēng)為三元(目)運(yùn)算符,是if...else結(jié)構(gòu)的簡(jiǎn)化形式,可以嵌套使用。
復(fù)制代碼 代碼如下:
int x = 1;
string s = x + ""; ;
s += (x == 1 ? "man" : "men");
Console.WriteLine(s);//輸出1man
2、checked和unchecked
復(fù)制代碼 代碼如下:
byte b = 255;
{
b++;
}
Console.WriteLine(b.ToString());//輸出0
但是由于byte只能包含0-255的數(shù),所以++之后會(huì)導(dǎo)致b溢出。因此,如果把一個(gè)代碼塊標(biāo)記為checked,CLR就會(huì)執(zhí)行溢出檢查,如果發(fā)生溢出,就拋出來(lái)OverflowException異常。
如下所示:
復(fù)制代碼 代碼如下:
byte b = 255;
checked
{
b++;
}
Console.WriteLine(b.ToString());//拋出OverflowException異常,算術(shù)運(yùn)算導(dǎo)致溢出
如果要禁止溢出檢查,可以標(biāo)記為unchecked:
復(fù)制代碼 代碼如下:
byte b = 255;
unchecked
{
b++;
}
Console.WriteLine(b.ToString());//輸出0,不拋異常
3、is
is運(yùn)算符可以檢查對(duì)象是否與特定的類(lèi)型兼容。“兼容”表示對(duì)象是該類(lèi)型或者派生自該類(lèi)型。
復(fù)制代碼 代碼如下:
string i = "hello i...";
if (i is object)
{
Console.WriteLine("i is an object...");//執(zhí)行了這句話(huà)
}
4、as
as運(yùn)算符用于執(zhí)行引用類(lèi)型的顯式類(lèi)型轉(zhuǎn)換(string 為引用類(lèi)型)。如果要轉(zhuǎn)換的類(lèi)型與指定的類(lèi)型兼容,轉(zhuǎn)換就會(huì)成功進(jìn)行;如果類(lèi)型不兼容,as運(yùn)算符就會(huì)返回Null。
復(fù)制代碼 代碼如下:
string i = "hello i...";
if (i is object)
{
object obj = i as object;//顯式類(lèi)型轉(zhuǎn)換
Console.WriteLine(obj is string ? "obj is string..." : "obj is not string...");//輸出obj is string...
}
5、sizeof
sizeof運(yùn)算符可以確定stack中值類(lèi)型需要的長(zhǎng)度(單位是字節(jié)):
復(fù)制代碼 代碼如下:
int byteSize = sizeof(byte);//輸出1
int charSize = sizeof(char);//輸出2
int uintSize = sizeof(uint);//輸出4
int intSize = sizeof(int);//輸出4
6、typeof
typeof運(yùn)算符常常會(huì)跟GetType()方法結(jié)合使用,來(lái)反射出類(lèi)的屬性、方法等。
復(fù)制代碼 代碼如下:
Type intType = typeof(int);
System.Reflection.MethodInfo[] methodInfo = intType.GetMethods();
methodInfo.ToList().ForEach(x => Console.WriteLine(x.Name));//反射出int類(lèi)型的方法名
7、可空類(lèi)型和運(yùn)算符
如果其中一個(gè)操作數(shù)或兩個(gè)操作數(shù)都是null,其結(jié)果就是null,如:
復(fù)制代碼 代碼如下:
int? a = null;
int? b = a + 4;//b = null
int? c = a * 5;//c = null
但是在比較可空類(lèi)型時(shí),只要有一個(gè)操作數(shù)為null,比較的結(jié)果就是false。但不能因?yàn)橐粋€(gè)條件是false,就認(rèn)為該條件的對(duì)立面是true。如:
復(fù)制代碼 代碼如下:
int? a = null;
int? b = -5;
if (a >= b)
Console.WriteLine("a > = b");
else
Console.WriteLine("a < b");//會(huì)輸出這句話(huà)
8、空合并運(yùn)算符
例如:
復(fù)制代碼 代碼如下:
int? a = null;//加問(wèn)號(hào),是為了能夠給Int型賦值為null
int b;
b = a ?? 1;
[csharp]
Console.WriteLine(b);//輸出1
a = 3;
b = a ?? 10;
Console.WriteLine(b);//輸出10
相關(guān)文章
C#使用CefSharp自定義緩存實(shí)現(xiàn)
本文介紹了如何使用C#和CefSharp自定義緩存實(shí)現(xiàn)減少Web應(yīng)用程序的網(wǎng)絡(luò)請(qǐng)求,提高應(yīng)用程序性能。首先,本文講解了CefSharp的基本知識(shí)和使用方法。然后,詳細(xì)闡述了在CefSharp中實(shí)現(xiàn)自定義緩存的步驟和技巧。最后,通過(guò)實(shí)例演示了如何使用自定義緩存功能獲取并展示網(wǎng)頁(yè)數(shù)據(jù)2023-04-04C#實(shí)現(xiàn)TIF圖像轉(zhuǎn)PDF文件的方法
這篇文章主要介紹了C#實(shí)現(xiàn)TIF圖像轉(zhuǎn)PDF文件的方法,涉及C#使用TIFtoPDF工具實(shí)現(xiàn)pdf文件轉(zhuǎn)換的技巧,需要的朋友可以參考下2015-07-07C#開(kāi)發(fā)中經(jīng)常用的加密解密方法示例
這篇文章主要給大家介紹了關(guān)于C#開(kāi)發(fā)中經(jīng)常用的加密解密方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07unity 實(shí)現(xiàn)攝像機(jī)繞某點(diǎn)旋轉(zhuǎn)一周
這篇文章主要介紹了unity 實(shí)現(xiàn)攝像機(jī)繞某點(diǎn)旋轉(zhuǎn)一周,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04