一:电脑是用什么来存储所使用的数据

这个问题用一句话比较笼统的概括那就是:电脑使用内存来记忆计算时所使用的数据
在现实生活中的数据各种各样,整数、小数、字符串、字符等等,它们的类型是不一样的,所以你要想在计算机中使用这些类型,就必须在内存中为它申请一块合适的空间


二:基础数据类型

首先要了解一点:C#认可的基础数据类型并没有内置于C#语言中,而是内置于.net Framework中(例如在c#中声明一个int类型的数据时,声明的实际上是.net结构中System.Int32的一个实例,这表示在语法上,可以把所有的基础数据类型看作是支持某些方法的类)
可以使用sizeof(int)得到一个类型在特定平台上的准确尺寸


c#有15个预定义类型,其中13个是值类型,两个是引用类型(string和object)
C#中的数据类型与类型转换_C#

C#中的数据类型与类型转换_C#_02

 C#中的数据类型与类型转换_C#_03

C#中的数据类型与类型转换_C#_04

C#中的数据类型与类型转换_C#_05


三:类型转换

显式与隐式转换都是针对于数字类型:
隐式转换:C# 默认的以安全方式进行转换,从小类型转换为大类型(例如int类型的变量赋值给float类型的变量),从派生类转换为基类,绝不会导致数据丢失
显式转换:即强制类型转换,显式转换需要强制转换运算符,而且强制转换可能会造成数据丢失
C#中的数据类型与类型转换_C#_06

——XXX.Parse(数字字符串)
此方法只能把数字字符串类型("3.14"可以,"abc"不行)转换为其他类型。如果转换成功则输出相应的值,如果转换失败则输出异常
C#中的数据类型与类型转换_C#_07

——XXX.TryParse(数字字符串,out 输出的结果)
此方法只能把数字字符串类型("3.14"可以,"abc"不行)转换为其他类型
这个方法是XXX.Parse的优化版,如果转换成功则输出相应的值,如果转换失败则输出0,不会出现异常
XXX.TryParse不可以接受NULL值。它内部实现其实是对XXX.Parse()做了一个异常处理,如果出现异常则返回false,并且输出0
C#中的数据类型与类型转换_C#_08

——Convert.ToXXX(任何类型的数据)
此方法可以转换任意类型的数据,使用此方法转换数字类型时会进行特殊的四舍五入(如果为x.5则返回两个整数数字之之间的偶数,否则直接进行四舍五入,例如4.5返回4,5.5返回6)
如果转换成功则输出相应的值,如果转换失败则输出异常
Convert.ToXXX可以接受NULL值,返回值为0。它内部实现其实是参数如果为 NULL,则直接返回 0
C#中的数据类型与类型转换_C#_09

总结:如果是两个数字类型进行转换则直接使用(XXX)数据,如果是将数字字符串类型转换为数字类型则使用XXX.Parse(数字字符串)或XXX.TryParse(数字字符串,out 输出的结果),如果是其他类型转换则再考虑Convert.ToXXX(任何类型的数据)
C#中的数据类型与类型转换_C#_10


四:可空类型Nullable

我们都知道,int类型的默认值为0,bool类型的默认值为false,不能为他们赋null,所以C#提供了一个可空类型Nullable,可以让任何类型赋值null

int? a = null;  //等同于Nullable<int> a = new Nullable<int>();

int a;          //默认值为0
int? a          //默认值为null

Null合并运算符:
Null合并运算符必须比较两个默认值为null的数据
如果第一个操作数为null,则返回第二个操作数的值,否则返回第一个操作数的值

using System;

class Test
{
    static int a;

    static void Main()
    {
        int? a = null;
        int? b = 2;
        int c;
        c = a ?? 10;
        Console.WriteLine(c);  //10
        c = b ?? 10;
        Console.WriteLine(c);  //2
    }
}