乐之叶
本帖最后由 乐之叶 于 2020-3-30 09:45 编辑


上篇   索引帖   下篇


类型转换

现在我们知道C#中有很多不同的类型
有时我们将一种类型的值转换为另一种类型
那么我们就需要类型转换

C#中存在4种转换:

1. 隐式转换                    
2. 显式转换(强制转换)
    3. 使用帮助程序类进行转换
4. 用户定义的转换          

目前我们了解前3种即可

隐式转换

对于内置数值类型,如果要存储的值无需截断或四舍五入即可适应变量,则可以进行隐式转换。

打个比方,我们有一个 300mL的瓶子(A) 和 500mL的瓶子(B)
那么只要是A中装的下的,B中也能装的下
现在将瓶子换成类型(例如小的整数类型和大的整数类型)
那么将A类型的值,转化为B类型的值 就不需要任何额外的操作
这就是隐式转换

例如
  1. byte myByte = 123;
  2. int ntInt = mtByte;
复制代码
这段代码就不会有任何问题
完整的转换列表
(来自官方文档)


显式转换

那么如果我们要将大的类型转换为小的类型呢?
如图,即使小的类型能装的下大的类型的值
VS也会报错
这个时候我们就需要显式转换
如果进行转换可能会导致信息丢失,则编译器会要求执行显式转换,显式转换也称为强制转换。 强制转换是显式告知编译器你打算进行转换且你知道可能会发生数据丢失的一种方式。 若要执行强制转换,请在要转换的值或变量前面的括号中指定要强制转换到的类型。           —— docs.microsoft.com


也就是说,当你进行显示转换时,VS就已经默认你已经知道了这样做的风险了
这样,即使 出现了预料之外的事情 VS也不会有任何提醒
上面的引用已经告诉我们显转换的方法了
如图,这运行的非常好
但是,当myByte装不下myInt的时候会发生什么呢?
那这个44是怎么来的呢?
byte是8位的,所以超出8位的就被斩了
而没有任何提示
这就是显式转换的风险


使用帮助程序类

这里我们只讲最常用的类
静态类Convert
另外的方法如 Parse 目前不需要了解
Convert类里的一些方法如下

看下面的实例
这样程序运行的似乎很好
其中前面提到过的Console.ReadLine();将我们输入的字符附给了myString
在后面我们使用了Convert.ToDouble();将其转化为double类型
并输出了这个值的两倍
注意,我们不能使用前面的显式转换完成这个任务


另外还要注意,这个方法还存在一定的问题
如果我们熊一下,输入了非正常数字(比如字母)之后
程序就报错了
解决方案将会在后面的教程中写到


Char


Char是个有意思的类型
因为相对于String而言,它是个整形
表示值介于0到65535之间的16位无符号整数
而它又是用来表示 Unicode 字符的


观察上面的代码,弄清楚Char的用法就很容易了
再看下面的代码和输出
输出的结果并不是  a65
而是162,这是因为他们都隐式转换为了 整形 而被进行了加法运算


那么请思考
怎样才能输出  a65 呢?




上篇   索引帖   下篇

来自群组: Bone Studio

玄虚233
那个Char 好像把 因为 打错成 以为 了

玄虚233
  1.             char myChar1 = 'a';
  2.             char myChar2 = (char)65;

  3.             Console.Write(myChar1);
  4.             Console.WriteLine((int)myChar2);

  5.             Console.WriteLine(myChar1 + Convert.ToString((int)myChar2));

  6.             Console.WriteLine(myChar1 + Convert.ToString(Convert.ToInt32(myChar2)));

  7.             Console.WriteLine(myChar1 + Convert.ToInt32(myChar2).ToString());

  8.             Console.WriteLine(myChar1 + ((int)myChar2).ToString());

  9.             Console.WriteLine("" + myChar1 + (int)myChar2);
复制代码

想不到其他的了

第一页 上一页 下一页 最后一页