• c#中的类型转换,int.parse("ab")为什么会出错


    一、问题

      

      在一个简单的闰年问题的判断中,输入框获取的字符串,我们希望输入数字字符串,将字符串转换为int整数进行判断。编写程序如下

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
    
    
            }
    
            private Boolean checkleap(int year)
            {
                bool temp = false;
                if (year % 4 == 0)
                {
                    temp = true;
                }
                if (year % 100 == 0)
                {
                    temp = false;
                }
                if (year % 400 == 0)
                {
                    temp = true;
                }
                return temp;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                String str = textBox1.Text;
                String str1 = "";
                if (checkleap(int.Parse(str)))
                {
                    str1 = "输入年份为闰年";
                }
                else
                {
                    str1 = "输入结果不为闰年";
                }
                MessageBox.Show(str1);
            }
        }
    }
    

         但是当我们输入非法字符时 int.parse("ab")抛出异常。

            为什么int.parse("ab")会抛出异常呢?应该怎么处理?

        我们接下来先讨论c#中的几种类型转换

    二、 几种类型转换方式。

     

         1.(int) 是一种类型转换,当我们从int类型到long,float,double,decimal类型,可以使用隐式转换,但是当我们从long类型到int类型就需要使用显式转换,否则会产生编译错误

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

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

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

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

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

      最后一个参数为输出值,如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值

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

      比较:Convert.ToInt32 参数为 null 时,返回 0; int.Parse 参数为 null 时,抛出异常。Convert.ToInt32 参数为 "" 时,抛出异常; int.Parse 参数为 "" 时,抛出异常。   Convert.ToInt32 可以转换的类型较多; int.Parse 只能转换数字类型的字符串

    三、问题分析

      由于输入字符串ab不是数字因此跑出了“FormatException”。

      在类型转换讨论中,我们提到了int.TryParse,或许可以解决问题。

      修改后的关键代码如下:

      

     1        private void button1_Click(object sender, EventArgs e)
     2         {
     3             String str = textBox1.Text;
     4             String str1 = "";
     5             int num = 0;
     6             bool temp = int.TryParse(str, out num);
     7             if (temp)
     8             {
     9                 if (checkleap(num))     
    10                     str1 = "输入年份为闰年";
    11                 else
    12                     str1 = "输入结果不为闰年";
    13             }
    14             else
    15             {
    16                 str1 = "输入年份格式不正确";
    17             }
    18             MessageBox.Show(str1);
    19         }

      测试用例:

    测试用例 预计输出 实际输出
    “1234” 输入结果不为闰年 输入结果不为闰年
    “2000” 输入结果为闰年 输入结果为闰年
    “1900” 输入结果不为闰年   输入结果不为闰年
    “abcd” 输入年份格式不正确 输入年份格式不正确
    “” 输入年份格式不正确 输入年份格式不正确

      测试截图:

    因此我们在以后的编程中,要注重int.Tryparse()的使用,以及对各种情况的考虑。

  • 相关阅读:
    什么是SQLCLR与使用
    SQL Server中使用正则表达式
    YUV格式
    Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
    Android中利用5.0系统屏幕录制UI漏洞骗取应用录制屏幕授权
    Android解析编译之后的所有文件(so,dex,xml,arsc)格式
    PageRank 算法--从原理到实现
    机器人视觉初级系列
    深入解析 iOS 开源项目
    微信热补丁 Tinker 的实践演进之路
  • 原文地址:https://www.cnblogs.com/zzy-blogs/p/4398731.html
Copyright © 2020-2023  润新知