亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#之用戶定義的數據類型轉換介紹

2020-01-24 02:53:41
字體:
來源:轉載
供稿:網友

c# 允許用戶進行兩種定義的數據類型轉換,顯式和隱式,顯式要求在代碼中顯式的標記轉換,其方法是在圓括號中寫入目標數據類型。

對于預定義的數據類型,當數據類型轉換時可能失敗或丟失某些數據,需要顯式轉換,

1 把int數值轉換成short時,因為short可能不夠大,不能包含轉換的數值。

2 把有符號的數據轉換為無符號的數據,如果有符號的變量包含一個負值,會得到不正確的結果。

3 把浮點數轉換為整數數據類型時,數字的小數部分會丟失。

此時應在代碼中進行顯式數據類型,告訴邊起義你知道這會有丟失數據的危險,因此編寫代碼時套把這些可能考慮在內。

c#允許定義自己的數據類型,這意味著需要某些工具支持在自己的數據類型間進行數據轉換。方法是把數據類型轉換定義為相關類的一個成員運算符,數據類型轉換必須聲明是隱式或者顯式,以說明怎么使用它。

注意:如果源數據值使數據轉換失敗,或者可能會拋出異常,就應把數據類型轉換定義為顯式。

定義數據類型轉換的語法類似于運算符重載。

例如  :隱式類型轉換:

復制代碼 代碼如下:

public static implicit operator float(Current current)
{
}

和運算符重載相同,數據類型轉換必須聲明為public和static。

注意:

當數據類型轉換聲明為隱式時,編譯器可以顯式或者隱式的調用數據類型轉換。

當數據類型轉換聲明為顯式時,編譯器只能顯式的調用類型轉換。

下面是個小例子:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 類型轉換
{
struct Current
{
public uint Dollars;
public ushort Cents;

public Current(uint dollars, ushort cents)
{
this.Dollars = dollars;
this.Cents = cents;
}

public override string ToString()
{
return string.Format("{0}.{1,-2:00}",Dollars,Cents);
}

public static implicit operator float(Current value)
{
return value.Dollars+(value.Cents/100.0f);
}

public static explicit operator Current(float f)
{
uint dollars = (uint)f;
ushort cents = (ushort)((f - dollars) * 100);
return new Current(dollars,cents);
}

}

class Program
{
static void Main(string[] args)
{
try
{
Current balance = new Current(50, 35);
Console.WriteLine(balance);
Console.WriteLine("balance using tostring(): "+balance.ToString());
float balance2 = balance;
Console.WriteLine("After converting to float,= " + balance2);
balance = (Current)balance2;
Console.WriteLine("After converting to Current,= " + balance);
float t = 45.63f;
Current c = (Current)t;
Console.WriteLine(c.ToString());

checked
{
balance = (Current)(-50.5);
Console.WriteLine("Result is:" + balance.ToString());
}
}
catch (System.Exception ex)
{
Console.WriteLine("Exception occurred:" + ex.Message);
}
Console.ReadKey();
}
}
}


將涉及到兩個問題:

1 從float轉換為Current得到錯誤的結果50.34,而不是50.35.----圓整造成的....發生截斷問題。

答:如果float值轉換為uint值,計算機就會截斷多余的數字,而不是去圓整它。計算機中數據是通過二進制存儲的,而不是十進制,小數部分0.35不能以二進制形式儲存。因為舍棄一部分,故實際轉化成的數據要小于0.35,即可以用二進制形式存儲的值,然后數字乘以100,得到小于35的數字34.有時候這種階段是很危險的,避免這種錯誤的方式時確保在數字轉換過程中執行智能圓整操作。

Microsoft編寫了一個類System.Covert來完成該任務。System.Covert包含大量的靜態方法來執行各種數字轉換,我們要使用的是Convert.ToUInt16()。注意,在使用System.Covert方法會產生額外的性能損耗,所以只有在需要的時候才使用。

注意: System.Covert方法還執行他們自己的溢出檢查,所以

復制代碼 代碼如下:

Convert.ToUInt16((f - dollars) * 100);

可以不放在checked里面.

2 在試圖轉換超出范圍的值時,沒有發生異常。主要是因為:發生溢出的位置根本就不在Main例程中--這是在轉換運算符的代碼中發生的,改代碼在Main()方法中調用,該方法沒有標記為checked。  其解決方法:

復制代碼 代碼如下:

 public static explicit operator Current(float f)
{
checked
{
uint dollars = (uint)f;
ushort cents = Convert.ToUInt16((f - dollars) * 100);
return new Current(dollars, cents);
}
}<SPAN style="FONT-FAMILY: Arial, Verdana, sans-serif">
</SPAN>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美美女15p| 日日骚av一区| 久久久久久久国产| 中文字幕综合一区| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品xxx视频| 在线亚洲国产精品网| 色777狠狠综合秋免鲁丝| 青青久久av北条麻妃海外网| 国产精品jvid在线观看蜜臀| 国产一区二区动漫| 国产日韩换脸av一区在线观看| 欧美肥婆姓交大片| 91a在线视频| 国产精品美女主播| 国产精品男人爽免费视频1| 欧美成人免费大片| 韩国三级电影久久久久久| 精品成人乱色一区二区| 欧美黑人一级爽快片淫片高清| 成人午夜在线影院| 欧洲s码亚洲m码精品一区| 91免费福利视频| 蜜臀久久99精品久久久久久宅男| 欧美在线一区二区视频| 亚洲第一色在线| 亚洲精品第一页| 日韩精品视频在线观看免费| 久久久久久久色| 久久精品国产亚洲| 日韩av免费看网站| 日本精品久久久| 亚洲欧美在线播放| 欧美中文字幕在线| 欧美日韩裸体免费视频| 久久免费视频这里只有精品| 日韩av网址在线| 国产精品日韩在线观看| 九色精品免费永久在线| 亚洲的天堂在线中文字幕| 欧美理论电影在线播放| 久久国产精品久久久久久久久久| 亚洲精品久久久久久久久| 69精品小视频| 久久亚洲国产精品成人av秋霞| 亚洲国产91色在线| 欧美中文字幕在线| 国产精品免费看久久久香蕉| 欧美在线亚洲一区| 日韩网站免费观看| 最近的2019中文字幕免费一页| 精品免费在线观看| 国产精品日韩av| 欧美国产日本在线| 色偷偷88888欧美精品久久久| 欧美一区深夜视频| 51ⅴ精品国产91久久久久久| 欧美亚洲激情在线| 久久国产精品影视| 国产亚洲欧洲在线| 日韩av理论片| 欧美激情综合亚洲一二区| 久久成人这里只有精品| 国产精品狠色婷| 一区二区三区无码高清视频| 91免费看片网站| 国产日韩视频在线观看| 国产精品专区第二| 91中文在线视频| 国产日产欧美a一级在线| 国产精品久久久久久搜索| 成人伊人精品色xxxx视频| 欧美黑人性生活视频| 91网站免费观看| 国产69精品久久久| 色综久久综合桃花网| 久久精品免费播放| 国产美女精品视频| 国产视频观看一区| 亚洲精品美女久久久| 亚洲精品电影网| 日韩亚洲第一页| 国产成人综合亚洲| 久久久久国产精品免费网站| 亚洲欧洲在线视频| 97在线观看视频| 国产精品视频公开费视频| 久久久久久高潮国产精品视| 欧美日韩另类视频| 国产亚洲欧美日韩精品| 亚洲在线一区二区| 国产精品视频xxx| 日韩av片电影专区| 日韩在线资源网| 欧美xxxx做受欧美.88| 亚洲精品国产福利| 在线国产精品视频| 欧美老女人性生活| 欧美多人爱爱视频网站| 狠狠躁夜夜躁久久躁别揉| 国产精品免费久久久久影院| 国产一区av在线| 欧美精品性视频| 欧美极品少妇xxxxⅹ裸体艺术| 日韩av中文字幕在线播放| 51色欧美片视频在线观看| 日本亚洲欧美三级| 亚洲人永久免费| 国产在线拍偷自揄拍精品| 亚洲美腿欧美激情另类| 51精品国产黑色丝袜高跟鞋| 欧美性猛交视频| 欧美在线免费看| 国外成人免费在线播放| 国产伦精品一区二区三区精品视频| 欧美大荫蒂xxx| 久久久久亚洲精品| 亚洲大尺度美女在线| 欧美性xxxx极品高清hd直播| 欧美日韩成人网| 欧美电影免费观看| 亚洲成人黄色在线观看| 久久这里只有精品视频首页| 欧美猛交ⅹxxx乱大交视频| 夜夜躁日日躁狠狠久久88av| 国产精品激情自拍| 国产精品嫩草视频| 日韩av成人在线观看| 亚洲xxx自由成熟| 国产中文欧美精品| 欧美另类99xxxxx| 精品久久久视频| 亚洲欧美日韩另类| 国产精品久久久久久久美男| 欧美成人精品一区二区三区| 欧美精品福利视频| 成人黄色生活片| 国产精品网站大全| 日韩动漫免费观看电视剧高清| 在线日韩第一页| 亚洲裸体xxxx| 黑人精品xxx一区一二区| 国产999精品视频| 欧美亚洲第一页| 国产精品网站大全| 国产成人精品免高潮费视频| 亚洲新中文字幕| 久久99热这里只有精品国产| 国产成人精品一区二区在线| 国产伦精品免费视频| 亚洲va欧美va国产综合久久| 欧美孕妇毛茸茸xxxx| 日韩黄在线观看| 日韩美女主播视频| 97色在线观看| 日韩一区二区av| 国产视频在线一区二区| 国产欧美一区二区三区四区| 久久久久久久久91| 91精品啪在线观看麻豆免费| 亚洲色图欧美制服丝袜另类第一页| 国产精品久久久久久久久| 久久久黄色av| 国产精品第一视频|