C# 类型转换

2018-10-31  本文已影响24人  遥远不是北_

1.隐式转换和显式转换:

namespace TypeConversionApplication
{
    class ExplicitConversion
    {
        static void Main(string[] args)
        {
            double d = 66.70;
            int i;

            // 显式类型转换(强制转换) double 为 int
            i = (int)d;

            // 进行了隐式转换,将 int 型(数据范围小)数据转换为了 long 型(数据范围大)的数据
            int inum = 100;
            long lnum = inum; 

            Console.WriteLine(i);
            Console.WriteLine(lnum);
            Console.ReadKey();
            
        }
    }
}
当上面的代码被编译和执行时,它会产生下列结果:
66
100

2.下面的实例把不同值的类型转换为字符串类型:

namespace TypeConversionApplication
{
    class StringConversion
    {
        static void Main(string[] args)
        {
            int i = 77;
            float f = 62.005f;
            double d = 23456.7652;
            bool b = true;

            Console.WriteLine(i.ToString());
            Console.WriteLine(f.ToString());
            Console.WriteLine(d.ToString());
            Console.WriteLine(b.ToString());
            Console.ReadKey();
            
        }
    }
}
当上面的代码被编译和执行时,它会产生下列结果:
77
62.005
23456.7652
True
  1. 类型之间的转换 - Convert.ToInt32() 和 int.Parse();int.TryParse()

1). int.Parse()是一种类容转换;表示将数字内容的字符串转为int类型。

如果字符串为空,则抛出ArgumentNullException异常;

如果字符串内容不是数字,则抛出FormatException异常;

如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常;

2). int.TryParse与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。

int.TryParse(string s,out int i)
第一个参数为要转化的值,第二个参数为输出值,如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值

该方式也是将数字内容的字符串转换为int类型,但是该方式比int.Parse(string s) 好一些,它不会出现异常,最后一个参数result是输出值,如果转换成功则输出相应的值,转换失败则输出0。

class test
{
    static void Main(string[] args)
    {
        string s1="abcd";
        string s2="1234";
        int a,b;
        bool bo1=int.TryParse(s1,out a);
        Console.WriteLine(s1+" "+bo1+" "+a);
        bool bo2=int.TryParse(s2,out b);
        Console.WriteLine(s2+" "+bo2+" "+b);
    }
}
结果输出:
abcd False 0
1234 True 1234

3). Convert.ToInt32()是一种类容转换;但它不限于将字符串转为int类型,还可以是其它类型的参数;

  1. string 转 int 与抛异常
    string 字符串类型和 int 也是可以转换的。下面代码给出错误的转换方法。
string a = "123";  // 将a设置为字符串“123”
int x = (int) a;   // 转换

VS 在编译时就会报错, 那么,string 该怎么转换成 int 类型, 我们需要用到 int.Parse(), 代码:

string a = "123";     // 将a设置为字符串“123”
int x = int.Parse(a);     // 转换

如果仅仅是这样,是没有问题的,但是,我们下面再来做一个实例。
用户输入一个数字,而电脑将计算出这个数字加上1以后的答案,并且显示出来。
用户输入的东西,即 Console.ReadLine() ,一定是以字符串形式表现的。
于是,运用之前的方法,我们可以写出以下的代码:
class test
{
static void Main(string[] args)
{
Console.WriteLine("输入数字,将计算出它加1的答案");
int a = int.Parse(Console.ReadLine()); //转换用户输入的数字
Console.WriteLine("答案是{0}",++a); //++a 即 a+1 后的那个数
Console.ReadKey();
}
}
当程序运行时,会出现:
输入数字,将计算出它加1的答案

5
答案是 6

但是!!! 如果用户输入并非数字的其他字符,如汉字,会发生什么情况?
此时,用户输入 王 ,程序将无法继续运行下去,因为int类型只能存整数,不能存字符。
这时,程序就会抛出异常。
如果用 VS 编,你还会看到异常类型:FormatException。
所以,为了保险,可以用try、catch来解决此问题。核心代码为:

try
{
               
}
catch (Exception)
{
                
}

try 在英语中就是尝试的意思。在这段代码中,try{} 部分,顾名思义,也就是去尝试进行下面的代码。catch{} 部分,则是检测异常。这样,在出现异常时,catch 就能捕获到异常,从而程序并不会停止。
则这段程序,完整的代码应该为:

using System;
class 测试
{
    static void Main(string[] args)
    {
        try
        {
           Console.WriteLine("输入数字,将计算出它加1的答案");
           int a = int.Parse(Console.ReadLine());   //有可能会抛出异常
           Console.WriteLine("答案是{0}",++a);   //如果没有异常,程序才会进入这一步
        }
        catch (Exception)
        {
            Console.WriteLine("无法转换");  //如果捕获到异常,就说“无法转换”
        }
         Console.ReadKey();
    }
}

这样,如果我输入了 '王' ,程序结果为:

无法转换
上一篇下一篇

猜你喜欢

热点阅读