c#運算子幾點小結

來源:互聯網
上載者:User
c#主要支援下面所示的運算子:Code
算術運算子                         + - * / %
邏輯運算子                         & | ^ ~ && || !
字串串連運算子                   +
增量和遞減運算子                   ++ --
移位元運算符                         << >>
比較子                         == != < > <= >=
賦值運算子                         = += -= *= /= %= |= ^= <<= >>=
成員訪問運算子(用於對象和結構)   .
索引運算子(用於數組和索引器)     []
資料類型轉換運算子                 ()
條件運算子(三元運算子)           ?:
委託串連和刪除運算子               + -
對象建立運算子                     new
類型資訊運算子                     sizeof(只用於不安全的代碼)  is as typeof 
溢出異常控制運算子                 checked unchecked
間接定址運算子                     * -> &(只用於不安全的代碼) []
命名空間別名限定符                 ::
空接合運算子                       ??

比較不常用卻又很重要的運算子:
1、is運算子和as運算子
is運算子可以檢查對象是否與特定的類型相容。比如下例中要檢查變數是否與object類型相容:int i=0;
if(i is object)
{
  Console.WriteLine("i is an object.");
}

as運算子用於執行參考型別的顯式類型轉換。如果要轉換的類型和指定的類型相容,轉換就會成功進行;如果類型不相容,as運算子就會傳回值null。舉例如下:object obj1="a string";
object obj2=5;
string str1= obj1 as string;// str1="a string";
string str2= obj2 as string;//str2=null;

註:as運算子允許在一步中進行安全的類型轉換,不需要先使用is運算子測試類型,再執行轉換。
2、checked和unchecked運算子
有如下的代碼:byte b=255;
b++;
Console.WriteLine(b.ToString());

byte資料類型只能包含0~255的數,所以b值的增量會溢出。CLR如何處理溢出?C#提供了checked和unchecked運算子。如果把一塊程式碼片段標誌為checked,CLR就會執行溢出檢查,如果發生異常,就拋出異常。byte b=255;
checked
{
  b++; //拋出OverflowException
}
Console.WriteLine(b.ToString());

如果要禁止溢出檢查,可以把代碼標記為unchecked:byte b=255;
unchecked
{
  b++;
}
Console.WriteLine(b.ToString());

在上述代碼中,不會拋出異常,但會遺失資料,因為byte資料類型不能包含256位,溢出的位會丟失,b變數得到的值是0.
註:unchecked是預設值。只有在需要把幾個未檢查的程式碼放在一個明確標記為checked的大代碼塊中,才需要顯式使用unchecked關鍵字。
3、sizeof運算子
學過c的都知道,sizeof可以用來確定堆棧中實值型別需要的長度(單位是位元組):unsafe
{
  Console.WriteLine(sizeof(int));//結果為4,因為int有四個位元組,32位  
}

4、可空類型和運算子
如果在程式中使用可空類型,就必須考慮null值在與各種運算子一起使用時的影響。通常可空類型與一元或二元運算子一起使用時,如果其中一個運算元或兩個運算元都是null,其結果就是null。int?a = null;
int?b = a+4; //b=null;
int?c = a*2; //c=null;

注意,在比較可空類型時,只有有一個運算元是null,比較的結果就是false。即不能認為因為一個條件是false,那麼它的對立面就是true。int?a=null;
int?b=10;
if(a>=b) //空值a顯然不能和b比較
  Console.WriteLine("a>=b"); 
else
  Console.WriteLine("a<b");

5、空接合運算子(??)
空接合運算子為處理可空類型和參考型別時表示Null值的可能性提供了一種捷徑。這個運算子放在兩個運算元之間,第一個運算元必須是一個可空類型或參考型別,第二個運算元必須與第一個運算元的類型不同,或者可以隱含地轉換為第一個運算元的類型。空接合運算子的計算如下:如果第一個運算元不是null,則整個運算式就等於第一個運算元的值。但如果第一個運算元是null,則整個運算式就等於第二個運算元的值。例如:int?a=null;
int b;
b=a??10; // b的值為10;
a=15;
b=a??10;//  b的值為15;

注意:如果第二個運算元不能隱含地轉換為第一個運算元的類型,就產生一個編譯錯誤。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.