C# 的类型转换有 显式转型 和 隐式转型 两种方式.
显式转型: 有可能引发异常, 精确度丢失及其他问题的转换方式. 需要使用手段进行转换操作.
隐式转型: 不会改变原有数据精确度, 引发异常, 不会发生任何问题的转换方式. 由系统自动转换.
不同类型的数据进行操作(加减乘除赋值等等), 是需要进行类型转换 后, 才能继续操作. 所以需要 "类型转换".
隐式转型
隐式转型容易理解, 当两种或多种数据类型进行某种操作时, 不需要干预, 系统会自动进行隐式转换.
如
- int i = 66666;
- long b = i; // 转为 long 类型后为 b 赋值
通常情况下, 多种 值类型 进行计算时, 系统会自动进行隐式转型, 并且总是转为范围更大的数据类型, 并且不会发生精确度变化, 数字大小变化等等.
显式转型
问题是, 但你需要把一个 long 类型的数据转成 int 时, 又或者让 string 与 int 互转, 当数据小数点太多时, 这时候就必须使用 显式转型.
一, 使用 ([type]) 转型操作符
此方法适用与值类型转换( string 属于引用类型)
在需要转换的变量前加上 ( [类型] ) 即可
请仔细观察下面两图的差异
第二张图中的代码中, 第二行, 为 int b = (int)i;
在需要转换的变量前使用 ([type]) 这种格式进行转换, 如(int),(float),(long)
注意,
此种方法只能对 值类型数据进行转换.
不能将范围大的类型 往 小 转换 , 例如 float 转为 int
第二,[Type].Parse()
([type]) 方法是无法在值类型, 引用类型 ( string 类型) 间转换的.
但每种数据类型都提供一个 Parse()方法, 它允许把 字符串转成对应的 数值类型.
- int.Parse()
- float.Parse()
- ... ...
请看例子
- string str = "666";
- long i = int.Parse(str);
- Console.WriteLine($"{i},{i.GetType()}");
- Console.ReadKey();
- (图如)
注意,
Parse() 是专为 string 类型转成 值类型 提供功能的!
Parse() 是为符合数字格式的 string 类型进行转换!
下面的例子都是错误用法 !
Parse() 是将符合数字格式的字符串转为数字, 也就是说,
( )括号内的必须为字符串 !
字符串的内容必须为数字 !
例子 1 ( ) 括号内的内容不是字符串
例子 2 变量 str 的内容不是 有效数字格式
第三,[Type].TryParse()
格式如下
- int.TryParse()
- float.TryParse()
- ... ...
.TryParse()与 .Parse()相似, 但是使用形式不太一样,
[类型].TryParse(要更改的字符串, out 存储到哪个变量);
最重要的不同点在于,.TryParse() 在转换失败时, 不会引发异常, 而是返回 flase
例子
- string str = "666";
- int i;
- bool b = int.TryParse(str,out i); // 接收转换结果
或者
- string str = "666";
- int i;
- int.TryParse(str,out i); // 不接收转换结果
如果你不知道 out 的使用, 请查阅 C# 中的 out 参数 / ref 参数 / params 可变参数
第四, System.Convert
方法例子
- System.Convert.ToSingle();
- System.Convert.ToInt32();
- System.Convert.ToDouble();
- ... ...
System.Convert 允许将一种类型转为另一种类型.
常见 类型列表: char,sbyte,short,int,long,uint,ulong,float,double,decimal,string,bool ... ...
但是, 同样需要格式支持!
- string str = "666";
- int a= System.Convert.ToInt32(str); // 正确
- string str = "666.66";
- int a= System.Convert.ToInt32(str); // 报错
- int a = 66666;
- bool c = System.Convert.ToBoolean(a); // 正确
- string str = "666.66";
- bool c = System.Convert.ToBoolean(str); // 报错
System.Convert 在转换是也需要注意 格式 才能转换成功.
同样, 此方式也会发生精确度, 数字大小改变
第五, System.Convert
.Tostring()
每种数据类型都提供了转为字符串类型的方法 ToString()
无论是值类型还是 DateTime 等各种引用类型.
ToString()使用方法最为简单, 请留意下列例子的红色背景部分
- using System;
- using System.IO;
- public class Test
- {
- static void Main()
- {
- int a = 666;
- string aa = a.ToString();
- Console.WriteLine($"{aa}");
- float b = 666.666F;
- string bb = b.ToString();
- Console.WriteLine($"{bb}");
- DateTime c = DateTime.Now;
- string cc = c.ToString();
- Console.WriteLine($"{cc}");
- FileInfo d = new FileInfo("E:\\test.txt");
- string dd = d.ToString();
- Console.WriteLine($"{dd}");
- string ee;
- try
- {
- int x = 1;
- int y = 0;
- int e = x / y;
- }
- catch (Exception ex)
- {
- ee = ex.ToString();
- Console.WriteLine($"{ee}");
- }
- Console.ReadKey();
- }
- }
看到了吧? 无论什么类型, 只需在后面加上 ToString() , 都能 输出 string 类型的内容.(不是转为 string 类型!)
当然, ToString() 是一个方法, 并提供了 一下传入参数, 每种类型都有几个重载的 TOString() 方法, 例如 DateTime 的
- public string ToString(string format, IFormatProvider provider);
- public string ToString(string format);
- public string ToString(IFormatProvider provider);
- public override string ToString();
其它方面不再赘述.
复制下列代码到控制台, 看看输出了什么
- using System;
- using System.IO;
- public class Test
- {
- static void Main()
- {
- int a = 666;
- string aa = a.ToString();
- Console.WriteLine($"{aa}");
- float b = 666.666F;
- string bb = b.ToString();
- Console.WriteLine($"{bb}");
- DateTime c = DateTime.Now;
- string cc = c.ToString();
- Console.WriteLine($"{cc}");
- FileInfo d = new FileInfo("E:\\test.txt");
- string dd = d.ToString();
- Console.WriteLine($"{dd}");
- string ee;
- try
- {
- int x = 1;
- int y = 0;
- int e = x / y;
- }
- catch (Exception ex)
- {
- ee = ex.ToString();
- Console.WriteLine($"{ee}");
- }
- Console.ReadKey();
- }
- }
来源: https://www.cnblogs.com/whuanle/p/9938918.html