日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

运算符/类型转换

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 运算符/类型转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運算符

三元運算符

if...else的簡化形式,首先判斷一個條件,如果為真,返回第一個值.為假返回后一個值

int a = 3; bool result = a > 10 ? true : false;//a>10?如果大于返回true否則返回false

checked和unchecked

如果把代碼塊標記為checked,CLR就會執行棧溢出檢測

//byte類型最大取值255 byte a = 255; checked {a++; } //這里如果不加checed.++后輸出0(不會拋異常,但會丟失數據,溢出的位會被舍棄,所以值為0),加上后會拋出棧溢出異常 Console.WriteLine(a);

如果要禁止棧溢出,則可以把代碼標記unchecked

is運算符

is運算符可以檢測對象是否與特定類型兼容,兼容表示對象是該類型或者派生自該類型(這里只是做說明沒有實際意義,因為object是所有類型基類)

int i =10; i is object;

as運算符

//TODO

sizeof運算符

sizeof運算符可以確定棧中值類型需要的長度(單位為字節)

Console.WriteLine(sizeof(int));//4個字節Console.WriteLine(sizeof(byte));//1個字節

typeof運算符

返回一個表示特定類型的Systen.Type對象

Console.WriteLine(typeof(int));//System.Int32Console.WriteLine(typeof(byte));//System.Byte

可空類型和運算符

在C# 2.0中出現了可空類型,允許值類型也可以為空(null),可空類型的實現基于C#泛型。需要注意的是:在程序中使用可空類型就必須考慮null值在各種運算符一起使用的影響,通??煽仡愋团c一元或二元運算符一起使用時,如果一個操作數為null或兩個操作數為null.結果就是null

int? a = null;int? c = a + 4; //c=null

空合并運算符

空合并運算符??提供了快捷方式,處理可控類型和引用類型時表示null可能的值,需要注意:只能針對引用類型處理,規則是

  • 如果第一個操作數不是null,值就等于第一個操作數的值
  • 如果第一個操作數是null,值就等于第二個操作數的值?
int? a = null; int b; b = a ?? 10;//第一個操作數是null,值為第二個操作數.10 a = 3; b = a ?? 10;//第一個操作數不是null,值為第一個操作數.3

類型安全性

隱式轉換

隱式轉換是系統默認的,不需要加以聲明就會自動執行隱式類型轉換,在隱式轉換過程,編譯器無需對轉換進行詳細檢查就能夠安全的執行.隱式類型轉換是從低精度數值類型=>高精度數值類型

int a = 10; double b = a;//自動隱式類型轉換

顯式轉換

將高精度值-->低精度進行數據轉換時,可能會丟失數據,這時候需要使用顯式轉換,并且要考慮到可能出現算術溢出;顯式轉換需要用戶明確指出指定要轉換的類型

需要注意:

  • 顯式轉換可能導致錯誤,進行這種轉換時編譯器會對轉換進行溢出檢測,如果有溢出說明轉換失敗,表示源類型不是一個合法的目標類型無法進行類型轉換
  • 強制類型轉換會造成數據精度丟失
  • double a = 10; int b = (int)a;//顯式將double類型轉換為int

    可空類型數據轉換=>非可空類型或者另一個可空類型,其中可能會丟失數據,就必須使用顯式類型轉換,并且如果從可空類型轉換為非可空類型時.且變量值為null.就會拋出InvalidOperationException異常

    int? a = null; int b = (int)a; //System.InvalidOperationException:“可為空的對象必須具有一個值。 ?

    通過方法進行類型轉換

    ToString()方法:C#中的類型基類都繼承自Object類,所以都可以使用ToString()來轉換成字符串

    int a = 10; string s = a.ToString();

    int.Parse方法():int.Parse()用于將string類型參數轉換為int,需要注意:string類型參數不能為null,并且也只能是各種整型,不能是浮點型

    string a = "2"; string b = "2.6"; string c = null; int a1 = int.Parse(a);//正常 int a2 = int.Parse(b);//錯誤:輸入字符串格式錯誤 int a3 = int.Parse(c);//值不能為null

    int.TryParse方法():該方法int.Parse()方法類似,不同點在于int.Parse()方法無法轉換成功時會拋出異常.而int.TryParse()方法在無法進行轉換時會返回false,int.TryParse()方法需要一個out類型的參數,如果轉換成功,out參數的值就是正常轉換的值,否則,返回false

    string a = "2"; string b = "2.6"; string c = null; int i; bool a1 = int.TryParse(a,out i);//轉換成功,i=2
    bool a2 = int.TryParse(b, out i);//轉換失敗,a2=false bool a3 = int.TryParse(c, out i);//轉換失敗,a3=false

    通過Convert類進行轉換:Convet類提供了多種類型的轉換想  

    string a = "2"; int a1 = Convert.ToInt32(a);

    可以通過繼承即可IConventible或者TypeConventer類,實現自定義轉換

    使用as運算符轉換:

    //TODO

    int.Parse()/Convert.ToInt()/int.TryParse()方法對比

    參數和適用對象不同

    • int.Parse():參數數據類型只能是string類型,適用于string類型的數據
    • int.TryParse():參數也只能是string類型,適用于string類型的數據,但是在轉換失敗時會返回false,并且需要提供一個out類型的參數
    • Convert.ToInt():參數類型較多

    異常處理

    • Convert.ToInt()參數為null,返回0,參數為""時,拋出異常
    • int.Parse 參數為 null 時,拋出異常。參數為""時,拋出異常
    • int.TryParse()方法比int.Parse()方法多了一個異常處理,如果出現異常則返回false,并且將輸出參數返回0。

    返回值

    • int.TryParse與int.Parse和Convert.ToInt 在返回值的不同是返回bool類型。獲取轉換后的值是通過out參數獲取的

    比較相等

    對象比較相等的機制有所不對,這取決于比較的是引用類型(類的實例)還是值類型(基本數據類型/結構/或枚舉的實例)

    默認情況下:

    • 值類型使用值類型相等引用類型使用引用相等:兩個值相等

    • 引用類型使用引用相等:兩個引用指向同一個對象

    值類型比較相等(比較值相等),返回True

    int x = 5, y = 5; Console.WriteLine(x == y);

    ?

    引用類型比較相等(比較兩個引用是否指向同一對象),返回True

    string x = "5", y = x; Console.WriteLine(x == y);

    ?

    ==和!=運算符:編譯器編譯時根據操作數的數據類型決斷使用何種方式比較,

    • 對于基本類型比較的是基本類型的值
    • 對于引用類型,比較的是對象的內存地址,不同的對象自然有不同的內存地址
    int a = 5, b = 5; string x = "5", y = x; //a/b是值類型,所以會判斷他們的值是否相等,返回True Console.WriteLine(a == b); //x/y是引用類型,所以判斷他們是否指向統一對象,返回True Console.WriteLine(x == y);

    Object.Equals虛方法:Equals在程序運行時決定比較的類型,根據對象的實際類型調用對應類中重寫的Equals方法進行比較

    int a = 5, b = 5; string x = "5", y = x; //調用System.Int32的Equals進行比較,返回True Console.WriteLine(a.Equals(b)); //調用System.String的Equals進行比較,返回True Console.WriteLine(x.Equals(y));

    ?但是如果這里把string參數設置為null

    string x = null, y = x; Console.WriteLine(x == y);//==依舊判斷是否引用是否指向同一個對象,返回True Console.WriteLine(x.Equals(y));//第一個運算對象是null,Equals方法會拋出NullReferenceException異常;而靜態的運算符則不會

    ?Object靜態的Equals方法:Object.Equals虛方法是在程序運行時決定比較的類型,根據對象的實際類型調用對應類中重寫的Equals方法進行比較,如果對象類型是object怎么處理呢,答案Object類還提供了一個靜態的Equals方法,可以對編譯時不知道類型null對象進行安全的比較

    ?

    object的靜態ReferenceEquals方法

    ?

    這里需要再學習補充

    轉載于:https://www.cnblogs.com/GnailGnepGnaw/p/10623264.html

    總結

    以上是生活随笔為你收集整理的运算符/类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。