学习目标:
学会C#数据类型的转换
C# 类型转换方法:
- 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
- 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
下面的实例把不同值的类型转换为字符串类型:
namespace TypeConversionApplication
{
class StringConversion
{
static void Main(string[] args)
{
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;
Console.WriteLine(i.ToString());
Console.WriteLine(f.ToString());
Console.WriteLine(d.ToString());
Console.WriteLine(b.ToString());
Console.ReadKey();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
75 53.005 2345.7652 True
Convert.ToInt32() 与 int.Parse() 的区别:
举例来说:假如从 url 中取一个参数 page 的值,我们知道这个值是一个 int,所以即可以用 Convert.ToInt32(Request.QueryString["page"]),也可以用 int.Parse(Request.QueryString["page"]),但是如果 page 这个参数在 url 中不存在,那么前者将返回 0,0 可能是一个有效的值,所以你不知道 url 中原来根本就没有这个参数而继续进行下一下的处理,这就可能产生意想不到的效果,而用后一种办法的话没有 page 这个参数会抛出异常,我们可以捕获异常然后再做相应的处理,比如提示用户缺少参数,而不是把参数值当做 0 来处理。
(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。
BitConverter类:
BitConverter类可以将数值型数据转换为字节数组,同样可以将字节数组转换为数值。
Parse方法:
Parse 方法用于将字符串类型转换成任意类型:
数据类型 变量 = 数据类型.Parse(字符串类型的值);
int num1 = int.Parse("123");
ToString方法:
C#的每一个类和结构都隐式继承自System.Object,而Object提供了ToString()虚方法,所以任何类的对象都有ToString()方法,该方法可以将对象转化为字符串类型。
第一种情况是数值类型,直接转换成字符串:
int a=100;
string str=a.ToString();
第二种是引用类型,输出当前对象所在命名空间及类名:
Person p= new Person();
Console.WriteLine(p); // 等价于Console.WriteLine(p.ToString());
输出:Test.Person
ToString方法为虚方法,可以重写。所以通过重写ToString(),可以输出我们想要的内容。
public override string ToString()
{
return "Person: " + name + " " + Height;
}
字符数组和字符串互转:
字符串转换为字符数组:
char[] tempChar = sourceString.ToCharArray();
字节数组转换为字符串:
string str = new string(tempChar);
Encoding类:
Encoding类位于System.Text命名空间中,主要用于在不同的编码和Unicode之间进行转换。
利用Encoding类的Convert方法可将字节数组从一种编码转换为另一种编码。方法原型为:
Public static byte[] Convert(Encoding srcEncoding,Encoding dstEncoding,byte[]bytes)
各参数含义如下。
- srcEncoding:表示源编码格式。
- dstEncoding:表示目标编码格式。
- bytes:待转换的字节数组。
- 返回值为包含转换结果的Byte类型的数组。
利用Encoding类可以实现字符串与字节数组互相转换(一定要指定好编码格式,否则会导致乱码):
//用Ascii编码将xxxByteArray字节数组转化为字串ss
string ss = Encoding.ASCII.GetString(xxxByteArray);
//用系统默认编码将字串ss转换为字节数组test
byte[] test=Encoding.Default.GetBytes(ss);
List列表转字符串:
List列表转数组用oArray()
;
数组转List列表用ToList()
;
List转字符串:
string s = string.Join(",", list.ToArray());
字符串转List:
string s = "1, 2, 3";
List<string> list = new List<string>(s.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries));