• c# 数据类型、类型转换、变量、常量、运算符


     一、数据类型

    在 C# 中,变量分为以下几种类型:

    • 值类型(Value types)
    • 引用类型(Reference types)
    • 指针类型(Pointer types)

    值类型(Value types)

    值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。

    值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。

    引用类型(Reference types)

    引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。

    换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:objectdynamic 和 string

    指针类型(Pointer types)

    指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。

     

    知识点

    1、decimal,double,float的区别

    • 三者是精度不同的浮点数

    精确度简单来说就是保留到小数点后几位

     试运行如下所示

     

     

     float 8位

    double 16位

    decimal 28位

    二、类型转换

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

    • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
    • 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

    1、隐式转换

    隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

    隐式转换不需要做任何工作,也不需要另外编写代码。如将int型数据转换成double型数据:

    int a = 10;
    double b = a;//隐式转换

    隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。基于这个转换规则,C#的隐式转换不会导致数据丢失。需要注意的是我们最常用的简单类型bool和string没有隐式转换。

    2、显式转换

    显式转换:从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理。显式转换又叫强制类型转换,显式转换需要用户明确的指定转换类型。如将double类型数据转换成int类型数据:

    double c = 10.5;
    int d = (int)c;//显示转换

    提醒:

    (1)、显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。无法进行类型转换。

    (2)、强制类型转换会造成数据丢失,如上面的例子中,最终得到的d值为10。

    3、通过方法进行类型转换

    (1)、使用ToString()方法。所有类型都继承了Object基类,所以都有ToString()这个方法(转化成字符串的方法)。

    (2)、通过int.Parse()方法转换,参数类型只支持string类型。注意:使用该方法转换时string的值不能为为NULL,不然无法通过转换;另外string类型参数也只能是各种整型,不能是浮点型,不然也无法通过转换 (例如int.Parse("2.0")就无法通过转换)。

       int i;
    i = int.Parse("100");

    (3)、通过int.TryParse()方法转换,该转换方法与int.Parse()转换方法类似,不同点在于int.Parse()方法无法转换成功的情况该方法能正常执行并返回0。也就是说int.TryParse()方法比int.Parse()方法多了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。

     int i;
     string s = null;
     int.TryParse(s,out i);

    (4)、通过Convert类进行转换,Convert类中提供了很多转换的方法。使用这些方法的前提是能将需要转换的对象转换成相应的类型,如果不能转换则会报格式不对的错误。注意:使用Convert.ToInt32(double value)时,如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。

    (5)、实现自己的转换,通过继承接口IConventible或者TypeConventer类,从而实现自己的转换。

    知识点

    1、int.TryParse()

    public static bool TryParse(string s, out Int32 result);

    如果转换成功则返回true。否则返回false

    int.TryParse(string s,out int i) 的参数: s是要转换的字符串,i 是转换的结果。

    执行成功返回true,输出转换成功的值;执行失败返回0

    经过测试发现如下:
    
    int i=0;
    
    1、s 为null
    
    int.TryParse(null,out i) 
    false
    
    2、s 为空字符串
    
    int.TryParse(“”,out i) 
    false
    
    3、s字符串中带有 空格。
    
    int.TryParse(“1 “,out i) 
    true 
    int.TryParse(” 1”,out i) 
    true 
    int.TryParse(” 1 “,out i) 
    true 
    int.TryParse(“1 2”,out i) 
    false
    
    4、非数字型字符串 肯定是 false了。
    
    5、在数据库的操作中,经常会遇到了 DBNull
    
    int.TryParse(System.DBNull,out i) 
    “System.DBNull”是一个“类型”,这在给定的上下文中无效
    
    int.TryParse(System.DBNull.Value,out i) 
    与“int.TryParse(string, out int)”最匹配的重载方法具有一些无效参数 
    int.TryParse(System.DBNull.Value.ToString(),out i) 
    false
    判断一个输入框是否为整数
    int baseNum = default(int);
    if (!int.TryParse(txtBaseNum.Text, out baseNum))
    {
      MessageBox.Show("请输入一个整数。");
      return;
    }

     
    //语法:int.TryParse(str, out res)
    
    int res = 1;
    int i = 3;
    string str = "";
    if(int.TryParse(str, out res)){
        //因为str是字符串类型,所以此次转换肯定是失败的,失败返回false
        //所以不会进来循环内部
        //由于执行失败,所以res的值是0
    }
    if(int.TryParse(i, out res)){
        //因为i是int类型,所以此次转换是成功的,成功返回true
        //所以会进入到循环内部
        //由于执行成功,所以res的值是i,也就是3
    }
    ————————————————
    版权声明:本文为CSDN博主「Dear_BigTiger」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Dear_BigTiger/article/details/81033844

    总结:TryParse可以为我们的程序减少报错概率,帮助我们准确的完成业务需求,也可以用来判断用户输入的时间、金额、数量等是不是符合规则

    2、日期转换

    1、【c#】将DataTable的时间精确到毫秒

    Convert.ToDateTime(dt.Rows[0]["pay_time"]).ToString("yyyy-MM-dd hh:mm:ss.fff");

            先将object类型的dt.Rows[0]["pay_time"]转换成DateTime,转换字符串的时候格式化。

            现在的日期是12小时制的,有时候我们想要的是24小时制,这时候用“HH:mm:ss.fff”就实现了想要的效果。

    2、2020-05-13T17:43:22 转化为正常时间 

    string sTime1 =‘2020-05-13T17:43:22 ’

    string sTime = Convert.ToDateTime(sTime1).ToString();

    2、日期型转换成字符型

    C#时间格式 tostring、toshortdatestring、toshorttimestring

    C#日期格式化

     

    三、变量常量

    常量

    1、常量是使用 const 关键字来定义的 。定义一个常量的语法如下:

    const <data_type> <constant_name> = value;
    public const int c1 = 5;
  • 相关阅读:
    ios UIImageView
    ios UILable
    [leetCode]116. 填充每个节点的下一个右侧节点指针
    [leetCode]1002. 查找常用字符
    [leetCode]199. 二叉树的右视图
    [leetCode]784. 字母大小写全排列
    [leetCode]1297. 子串的最大出现次数
    [leetCode]1239. 串联字符串的最大长度
    1095. 山脉数组中查找目标值
    [leetCode]1235. 规划兼职工作
  • 原文地址:https://www.cnblogs.com/michellexiaoqi/p/16105755.html
Copyright © 2020-2023  润新知