美文网首页
C# 类型转换

C# 类型转换

作者: 遥远不是北_ | 来源:发表于2018-10-31 15:06 被阅读24次
  • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
  • 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

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();
    }
}

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

无法转换

相关文章

  • c# 学习笔记2

    C# 类型转换类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种...

  • C# Byte[]使用总结

    C# Byte[] string转换 01,C# string类型转成byte[]: Byte[] byteArr...

  • C#魔灵-lesson_04-数据转换

    类型转换分以下两种 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。 显式类型...

  • unity C# 自定义隐式转换

    在C#中类型转换类型:隐式转换(implicit conversions)隐式转换就是系统默认的、不需要加以声明就...

  • c# is & as

    做为C#里的类型转换操作符,is和as都是强制类型转换。 Difference is 类型检查,检查一个对象是否兼...

  • Python、JS、TS、C# 对比

    手头暂时没有C# 环境,以后会补全 内容\语言PythonJSTSC#强/弱类型强类型不可动态转换弱类型可动态转换...

  • C# 类型转换

    隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的...

  • 07.【转】C#中的as用法 &【原创】Revit中的转

    【转载内容】在程序中,进行类型转换是常见的事,C#支持基本的强制类型转换方法,例如: 这样强制转换的时候,这个过程...

  • C#的值类型和引用类型

    c#中值类型和引用类型是可以相互转换的。将值类型转化为引用类型的过程称为装箱,反之,将引用类型转换为值类型的过程称...

  • 10.18学习总结

    今天学习完了c#语言基础,包括类型转换(Parse和To string),装箱与拆箱(值类型和引用类型) ,...

网友评论

      本文标题:C# 类型转换

      本文链接:https://www.haomeiwen.com/subject/ujdatqtx.html