本篇文章是對C#中資料類型轉換的幾種形式進行了詳細的分析介紹,需要的朋友參考下
1、Convert.ToInt32(); //轉換成32位的整數。
2、變數.ToString();/最常見的轉換成 字串。
3、"訂單"+2514 //後面的數字會轉換為字串。
4、((類名A)對象名X) //強行將 對象X 轉換成 A類 的對象。
5、int.Parse(string);把字串型轉換成其他類型。
6、還有,如果要轉換成的類型為參考型別,還可以用 as
teacher tea = teahcer();
如 student stu = tea as student;
(1) 隱式轉換:一般是低類型向高類型轉化,能夠保證值不發生變化。
隱式數值C#資料類型轉換:
從 sbyte 到 short、int、long、float、double 或 decimal。
從 byte 到 short、ushort、int、uint、long、ulong、float double 或 decimal。
從 short 到 int、long、float、double 或 decimal。
從 ushort 到 int、uint、long、ulong、float、double 或 decimal。
從 int 到 long、float、double 或 decimal。
從 uint 到 long、ulong、float、double 或 decimal。
從 long 到 float、double 或 decimal。
從 ulong 到 float、double 或 decimal。
從 char 到 ushort、int、uint、long、ulong、float、double 或 decimal。
從 float 到 double。
不存在向 char 類型的隱式轉換,因此其它整型的值不會自動轉換為 char 類型。
浮點型不能隱式地轉化為decimal型
隱式枚舉轉換
隱式枚舉轉換允許將十進位整數 0 轉換為任何枚舉類型。
隱式引用轉換
衍生類別向基類轉換
隱式引用轉換是指一類參考型別之間的轉換,這種轉換總是可以成功,因此不需要在運行時進行任何檢查。
裝箱轉換
裝箱轉換允許將實值型別隱式轉換為參考型別。
(2) 顯示轉換:也稱強制類型轉換。不能保證資料的正確性。
(type)(運算式)
(3) 使用者自訂C#資料類型轉換
所有的使用者自訂轉換都是靜態,要使用static關鍵字
使用者自訂轉換分顯示和隱示,它們用implicit(隱式轉換)或 explicit(顯示轉換)關鍵字聲明。
static 訪問修辭符 轉換修辭符 operator 轉換類型(參數)
C#資料類型轉換樣本:
複製代碼 代碼如下:
struct Number
{
private int value;
public Number(int value) { this.value=value; }
//使用者自訂整型到Number型的隱式轉換
static public implicit operator Number(int value) { return new Number(value); }
//使用者自訂從Number型到整型的顯示轉換
static public explicit operator int(Number n) { return n.value; }
//使用者自訂從Number類型到string類型的隱式轉換
static public implicit operator string(Number n) { return n.ToString(); }
}
class Test
{
static public void Main()
{
Number n;
n=10;
Console.WriteLine((int)n);
//隱式轉換到string
Console.WriteLine(n);
}
}
使用System.Convert類
將一個基礎資料型別 (Elementary Data Type)轉換為另一個基礎資料型別 (Elementary Data Type)。
使用Parse方法
大部份預定義實值型別都有這個靜態方法,用來將相應的文本轉化為相應的實值型別。
裝箱和unboxing
裝箱和unboxing使實值型別能夠與 object 類型相互轉換。
裝箱轉換允許將“實值型別”隱式轉換為“參考型別”。將“實值型別”的值裝箱的操作包括:分配一個對象執行個體並將“實值型別”的值複製到該執行個體中。
C#資料類型轉換樣本:
此例將整數變數 i 通過裝箱轉換為對象 o。此例顯示對象保留了內容的原始副本,即 123。
複製代碼 代碼如下:
public static void Main()
{
int i=123;
object o=i;//隱式的裝箱
i=456;//改變變數i的值
Console.WriteLine("Thevalue-typevalue={0}",i);//456
Console.WriteLine("Theobject-typevalue={0}",o);//123是i的複製值
}
unboxing轉換:unboxing轉換允許將參考型別顯式轉換為實值型別。
unboxing操作包括以下兩個步驟:首先檢查該對象執行個體是否是某個給定的實值型別的裝了箱的值,然後將值從執行個體中複製出來。
C#資料類型轉換樣本:
下面的樣本闡釋無效unboxing的情況,即錯誤的unboxing如何導致 InvalidCastException。通過使用 try 和 catch,發生錯誤時會顯示錯誤資訊。
複製代碼 代碼如下:
public class UnboxingTest
{
public static void Main()
{
int intI=123;
object o=intI;//裝箱
try
{ //unboxing無效,short不是裝了箱的實值型別.檢查該對象執行個體是否是某個給定的實值型別的裝了箱的值
int intJ=(short)o;
Console.WriteLine("UnboxingOK.");
}
catch(InvalidCastException e)
{
Console.WriteLine("{0}Error:Incorrectunboxing.",e);
}
}
}
其它轉換用運算子
as
as 運算子用於執行參考型別的顯式類型轉換。 如果要轉換的類型與指定類型相容,轉換就會成功;如果類型不相容,則返回null。
運算式as 類型
as 運算子類似於類型轉換,所不同的是,當轉換失敗時,as 運算子將返回null,而不是引發異常。
樣本:
複製代碼 代碼如下:
object o1=”SomeString”;
object o2=5;
string s1=o1 as string;//類型相容s1=”SomeString”
string s2=o2 as string;//s2=null
is
is 運算子用於檢查對象的類型是否與給定類型相容(對象是該類型,或是派生於該類型)。
運算式 is 類型
樣本:
複製代碼 代碼如下:
int i=10;
if(iisobject)//true
{}
sizeof
sizeof 運算子用於獲得實值型別的大小(以位元組為單位)。
sizeof(type)
sizeof 運算子僅適用於實值型別,而不適用於參考型別。
sizeof 運算子僅可用於 unsafe 模式。
樣本:
複製代碼 代碼如下:
unsafe
{
Console.WriteLine(“{0}”,sizeof(int));
}