类型变量不兼容的类型转换
类型如果相兼容的两个变量,可以使用自动类型转换或者强制类型转换
但是,如果两个类型的变量不兼容,比如string与int或者string与double
这个时候我们有三种方法进行转换,前提条件是面儿上必须过的去
Q1:比如将一个数字的字符串转换数字?string str = “123”;
string str = "123";
var str1 = Convert.ToInt32(str);
var str2 = int.Parse(str);
int number = 0;
bool b = int.TryParse(str,out number);
Console.WriteLine(str1);//123
Console.WriteLine(str2);//123
Console.WriteLine(number);//123
Console.WriteLine(b);//true
Console.ReadKey();
结果是
Q2:比如将一个小数的字符串转换小数?string str = “1238.5”;
string str = "1238.5";
var str1 = Convert.ToDecimal(str);
var str2 = decimal.Parse(str);
decimal number = 0;
bool b = decimal.TryParse(str,out number);
Console.WriteLine(str1);//1238.5
Console.WriteLine(str2);//1238.5
Console.WriteLine(number);//1238.5
Console.WriteLine(b);//true
Console.ReadKey();
结果是
Q3:比如将时间格式的字符串转换为时间?string str = “2021-09-07”;
string str = "2021-09-07";
var str1 = Convert.ToDateTime(str);
var str2 = DateTime.Parse(str);
DateTime dt = new DateTime();
bool b = DateTime.TryParse(str, out dt);
Console.WriteLine(str1);//2021/9/7 0:00:00
Console.WriteLine(str2);//2021/9/7 0:00:00
Console.WriteLine(dt);//2021/9/7 0:00:00
Console.WriteLine(b);//true
Console.ReadKey();
结果是
Q4.枚举与int类型和string类型的转换
1.枚举类型默认是跟int类型相互兼容的,所有可以通过强转,当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来
2.枚举类型如果跟string类型相互转换,直接ToString()
但是如果将字符串换成枚举类型则需要(要转换的枚举类型)Enum.Parse(typeof(要转换的类型),“要转换的字符串”)
如果转换的字符串是数字,就算枚举中没有,也不会抛异常
如果转换的字符串是文本,如果枚举中没有,则会抛出异常
public enum Gender
{
男,
女
}
string str = "1";
Gender gender = (Gender)Enum.Parse(typeof(Gender), str);
Console.WriteLine(gender);
Console.ReadKey();//女
结果是
总结:
1.Convert.ToInt32()的底层就是int.parse() ,所以int.parse()效率更高
2.如果数字型的字符串转换为数字,则三种方法都一样,但如果不是存数字的字符串,那么转的时候Convert.ToInt32()
和int.parse()
会抛异常,而int.TryParse()
数字型会是0
,布尔型会是false
,时间是0001/1/1 0:00:00