C# 数据类型转换

学习目标:

学会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));

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值