C#类型转换
隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。(小->大)
显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。 (大->小)
bool -> System.Boolean (布尔型,其值为 true 或者 false)
char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
ushort -> System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
long -> System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
float -> System.Single (单精度浮点型,占 4 个字节)
double -> System.Double (双精度浮点型,占 8 个字节)
英文字符的 ASCII 码,或者一个汉字字符的 Unicode 码
将英文字符型数据强制转换成合适的数值型数据,就可以得到相应的 ASCII 码;反之,如果将一个合适的数值型数据强制转换成字符型数据,就可以得到相应的字符
把字符串转换成字符数组:字符串类 System.String 提供了一个 void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。
char[] chars = str.ToCharArray();
把字符数组转换成字符串:可以使用 System.String 类的构造函数来解决这个问题。System.String 类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和 String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。
char[] tcs = {''t'', ''e'', ''s'', ''t'', '' '', ''m'', ''e''};
string tstr = new String(tcs);
字符串转换为Int:
//方法一: int istr = Convert.ToInt16(str);
//方法二: int istr2 = int.Parse(str);
//方法三:int.TryParse(string s, out int i);
方法三也是将数组内容的字符串转换为int类型,但是该方式比int.Parse(string s)好一些,它不会出现异常,最后一个参数result是输出值,如果转换成功则输出相应的值,转换失败则输出0.
Convert.ToInt32()与int.Parse()区别
1)、这两个方法的最大不同是:他们对null值得处理方法:Convert.ToInt32(null)会返回0而不会产生任何异常,但是int.Parse(null)则会产生异常。
(2)、对数据四舍五入时候的区别
a、Convert.ToInt32(double value)如果value为两个整数中间的数字,则返回二者中的偶数;即3.5转换为4,4.5转换为4,而5.5转换位6.不过4.6可以转换为5,4.4转换为4.
b.int.Parse(“4.5”)直接报错:“输入的字符串格式不正确”。
c.int(4.6)=4 int转换其他数值类型为int时都没有四舍五入,强制转换。
(3)、对被转换类型的区别:int.Parse是转换String为int,Convert.ToInt32是转换继承自Object的对象为int的(可以有很多其他类型的数据)。你得到一个Object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt32.
int a = Convert.ToInt32(""); //异常
int b = int.Parse(""); //异常
int a = Convert.ToInt32(null); //0
Console.WriteLine(a);
//int b = int.Parse(null); //异常
//Console.WriteLine(b);
int c;
int.TryParse("",out c); // 0
Console.WriteLine(c);
int d;
int.TryParse(null, out d); // 0
Console.WriteLine(d);
int e;
Console.WriteLine(int.TryParse(null, out e)); // false
Console.WriteLine(int.TryParse("123", out int m)); //true
Console.WriteLine(int.TryParse("", out int n)); //false
Convert.ToDouble与Double.Parse的区别
实际上,Convert.ToDouble内部调用了Double.Parse:
(1)、对于参数为null时候:
Convert.ToDouble参数为null是,返回0.0;
Double.Parse参数为null时,抛出异常;
(2)、对于参数为“”时:
Convert.ToDouble参数为”“时,抛出异常;
Double.Parse参数为“”时,抛出异常。
(3)、其他区别:
Convert.ToDouble可以转换的类型较多;
Double.Parse只能转换数字类型的字符串。
Double.TryParse与Double.Parse又较为类似,但它不会产生异常,转换成功返回true,转换失败返回false.最后一个参数为输出值,如果转换失败,输出值为0.0;
Convert 类常用的类型转换方法如下表所示
方法 | 说明 |
---|---|
Convert.ToInt16() | 转换为整型(short) |
Convert.ToInt32() | 转换为整型(int) |
Convert.ToInt64() | 转换为整型(long) |
Convert.ToChar() | 转换为字符型(char) |
Convert.ToString() | 转换为字符串型(string) |
Convert.ToDateTime() | 转换为日期型(datetime) |
Convert.ToDouble() | 转换为双精度浮点型(double) |
Conert.ToSingle() | 转换为单精度浮点型(float) |
字符串转换为日期类型
Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss
Console.WriteLine(Convert.ToDateTime("2021-09-27 18:30:42")); //2021/9/27 18:30:42
DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
dtFormat.ShortDatePattern = "yyyy/MM/dd";
DateTime dt = Convert.ToDateTime("2011/05/26", dtFormat);
Console.WriteLine(dt.ToString()); //2011/5/26 0:00:00
DateTime dt2 = DateTime.ParseExact("20210909", "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine(dt2.ToString()); //2021/9/9 0:00:00
DateTime dt3 = DateTime.ParseExact("20210911", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(dt3.ToString()); //2021/9/11 0:00:00
DateTime dateTime;
var r1 = DateTime.TryParse("", out dateTime);
Console.WriteLine(r1 + "--------" + dateTime); //False--------0001/1/1 0:00:00
var r2 = DateTime.TryParse(null, out dateTime);
Console.WriteLine(r2 + "--------" + dateTime);//False--------0001/1/1 0:00:00
var r3 = DateTime.TryParse("2021-09-27 19:00:05", out dateTime);
Console.WriteLine(r3 + "--------" + dateTime); //
///DateTime.TryParse 当string内容不正确时,可以返回日期的最小值MinValue。并且可以通过返回的bool值判断转化是否成功。
///而DateTime.ParseExact()需要按特定的格式来转换,对格式的要求比较严,如果string中不是日期内容,而量类似“asdfasd”的字符串,则会出错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix