C#变量类型转换详解:装箱、拆箱与转换操作

需积分: 9 17 下载量 142 浏览量 更新于2024-12-28 收藏 58KB DOC 举报
"C#变量类型转换" 在C#编程中,类型转换是非常常见的操作,它涉及到数据在不同类型的变量之间转换。以下是对标题和描述中所提及知识点的详细解释: 1. **装箱与拆箱**: - 装箱是将值类型(如int, bool等)转换为对应的引用类型(如Int32, Boolean)。当一个值类型变量被赋给一个Object类型的变量时,就会发生装箱。 - 拆箱是相反的过程,将引用类型转换回值类型。例如,从Object类型恢复为int类型。 - 这两种操作都是自动进行的,但需要注意的是,拆箱失败(如尝试将非int类型的Object进行拆箱)会导致编译错误或运行时异常。 2. **数值类型之间的转换**: - C#支持不同类型数值之间的转换,如int到long,float到double等,但需要确保转换不会丢失数据或超出目标类型的范围。 - 需要使用强制类型转换操作符 `(type)` 来执行显式转换,否则可能会遇到编译错误。 3. **字符的ASCII码和Unicode码**: - `char` 类型在C#中表示一个Unicode字符,占用2个字节。 - ASCII码是7位的字符编码,只包含128个字符,可以通过 `(int)` 转换获得对应的整数值。 - Unicode码(UTF-16)包含了更多的字符,转换为整数可以使用 `char.GetUnicodeCode()` 方法。 4. **数值字符串和数值之间的转换**: - `int.Parse()` 和 `int.TryParse()` 用于将字符串转换为整数,前者会抛出异常,后者在转换失败时返回false。 - `double.TryParse()` 和 `decimal.TryParse()` 适用于浮点数和十进制数的转换。 5. **字符串和字符数组之间的转换**: - `string.ToCharArray()` 方法将字符串转换为字符数组。 - `char[]` 可以通过 `new string(charArray)` 转换回字符串。 6. **字符串和字节数组之间的转换**: - `Encoding.ASCII.GetBytes(string)` 和 `Encoding.Unicode.GetBytes(string)` 分别用于将字符串转换为ASCII和Unicode编码的字节数组。 - 相反,`Encoding.ASCII.GetString(bytes)` 和 `Encoding.Unicode.GetString(bytes)` 可以将字节数组还原为字符串。 7. **各种数值类型和字节数组之间的转换**: - 使用 `BitConverter` 类可以实现数值类型与字节数组之间的转换,如 `BitConverter.ToInt32(bytes, startIndex)`。 8. **转换成十六进制**: - `Convert.ToString(value, 16)` 可以将数值转换为十六进制字符串。 9. **日期型数据和长整型数据之间的转换**: - `DateTime.Ticks` 属性表示日期和时间的长整型表示,10,000 ticks = 1 millisecond。 - `DateTime.FromFileTime(long)` 和 `DateTimeToFileTime(DateTime)` 方法用于在DateTime和长整型之间转换,通常与文件系统交互时使用。 10. **格式化日期型数据**: - `DateTime.ToString(format)` 允许你使用特定的格式字符串来展示日期和时间,如 "yyyy-MM-dd" 或 "MM/dd/yyyy HH:mm:ss"。 理解这些转换方法是编写高效且健壮的C#代码的关键,熟练掌握这些转换操作能够帮助开发者更灵活地处理不同类型的数据。在实际编程中,应根据需求选择适当的转换方法,并注意可能存在的溢出和精度问题。
2018-04-11 上传
1、变量类型 int double string char bool decimal 变量的使用规则:先声明再赋值最后使用 int number; number=10; number=20; Console.WriteLine(number); 2、Camel Pascal 3、运算符 赋值运算符:= 复合赋值运算符:+= -= *= /= %= sum+=age; sum=sum+age; 算数运算符: + - * / % ++ -- 关系运算符: > < >= <= == != 逻辑运算符: && || ! 4、c#中的语法结构 分支结构: if if-else 选择结构: while do-while for 5、常量 声明的常量的语法: const 变量类型 变量名=值; 什么时候会用到常量? 6、枚举 语法: [public] enum 枚举名 { 值1, 值2, 值3, ........ } public:访问修饰符。公开的公共的,哪都可以访问。 enum:关键字,声明枚举的关键字 枚举名:要符合Pascal命名规范 将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。 枚举就是一个变量类型 ,int--double string decimal. 只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。 我们可以将一个枚举类型的变量跟int类型和string类型互相转换。 枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换。 当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。 枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString(). 如果将字符串转换成枚举类型则需要下面这样一行代码: (要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串"); 如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。 如果转换的字符串是文本,如果枚举中没有,则会抛出异常。 7、所有的类型都能够转换成string类型,调用ToString()。 8、结构 可以帮助我们一次性声明多个不同类型的变量。 语法: [public] struct 结构名 { 成员;//字段 } 变量在程序运行期间只能存储一个值,而字段可以存储多个值。 9、数组 一次性存储多个相同类型的变量。 语法: 数组类型[] 数组名=new 数组类型[数组长度]; ***数组的长度一旦固定了,就不能再被改变了 10、冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。 int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9 第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i=0 j=nums.Length-1-i 第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i=1 j=nums.Length-1-i 第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i=2 j=nums.Length-1-i 第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次 i=3 j=nums.Length-1-i 第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次 第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次 第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次 第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次 第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次 for(int i=0;i<number.Length-1;i++) { for(int j=0;j<nums.Length-1-i;j++) { if(nums[j]>nums[j+1]) { int temp=nums[j]; nums[j]=nums[j+1]; nums[j+1]=temp; } } } 11、方法 函数就是将一堆代码进行重用的一种机制。 函数的语法: [public] static 返回值类型 方法名([参数列表]) { 方法体; } public:访问修饰符,公开的,公共的,哪都可以访问。 static:静态的 返回值类型:如果不需要写返回值,写void 方法名:Pascal 每个单词的首字母都大些。其余字母小写 参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。 方法写好后,如果想要被执行,必须要在Main()函数中调用。 方法的调用语法: 类名.方法名([参数]); ***在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,这个时候, 类名可以省略。 12、return 1、在方法中返回要返回的值。 2、立即结束本次方法。