c#基础之数据类型

(一)字符串

      (1)字符串类型是不可变的,是引用类性。如果有大量字符串需要修改,可以用StringBuilder,它包含了Append(),AppendFormat(),Insert(),Remove(),Replace()等方法。两者的区别在于

  这些方法会修改StringBuilder本身中的数据,而不是简单的返回一个新字符串。

    (2)null表示将变量设置成无,且只能赋给引用类性,表示这个变量无任何值,不同于"",它表示为空字符串。

    (3)隐式类性的局部变量var。但是在数据类型已知的情况下最好不要用。

(二)类性的分类

      主要分为值类型和引用类性,区别在于值类型的数据总是进行值复制,引用类型的数据总是进行引用复制。

   (2.1)值类型中,变量引用的位置就是值在内存中实际存储的位置。因此,将第一个变量的值赋给第二个变量会在新变量的位置创建原始变量的值的一个内存副本。

   (2.2)引用类性的值存储的是对数据存储位置的引用。所以运行程序时,要先从变量中读取内存的位置,再"跳转"到包含数据的内存位置。引用类性指向的内存区域称之为堆(heap)。

               引用类型不像值类型那样要求创建数据的内存副本,所以复制引用类性的实例比复制大的值类型实例更高效。

  (三)数据类型之间的转换

       有可能造成大变小或者引发异常的任何转换都需要执行显示转换,相反属于隐式转型。

     (3.1)显式转换

              比如long类型的变量转换成int类型的变量,会造成精度上的缺失,这时候需要进行显示转换。

      (3.2)隐式转换

            比如int向long转换,不会引发精度的丢失,所以会隐式的转换。

      (3.3)不使用转型操作符的类型转换

         没有定义从字符串到数值类型的转换,因此需要使用 System.Convert,Parse(),TryParse()这样的方法,他允许将字符串转换成对应的数值类型。

        

            string text = "97E-31";

            float s = float.Parse(text);
 double num;
            string input="34.5";
            //和Parse()相比,如果input为控制不会报错,返回值为false。
            if (double.TryParse(input, out num))
            {
                double value = num;
            }
            else
            {


            }

其中int cou=default(int);表示获取int的默认值。

 (四)数组 

(4.1)逗号数量+1=维数(秩)。

(4.2)数组的实例化和赋值。

   

            // (1)声明数组的同时进行赋值: 
            string[] languages = { "C#","Java"};
            
            //(2)声明之后再进行赋值。
            string[] la;

            la = new string[] {"1","2" };
            //(3)可以分配数组但是不指定初始值,但是“运行时”将每个元素初始化数组类型的默认值。
            string[] item = new string[9];

 

   (4.3)多维数组

    

  //(1)初始化一个二维数组---2行3列。
            string[,] array = new string[2,3] { { "1", "2", "3" }, { "4", "5", "6" } };
           
            //初始化一个三维数组.下面cells被分解成2个string[,]类型的数组,每个数组的大小都是3*3
            string[, ,] cells;

            cells = new string[2, 3, 3] {
            {{ "1", "2", "3" },{ "1", "2", "3" },{ "1", "2", "3" },},
            
            {{ "1", "2", "3" },{ "1", "2", "3" },{ "1", "2", "3" },}};

(4.4)交错数组

  交错数组不使用逗号标识新的维。

  int[][] cells = {new int[]{1,2,2,3},
                            new int[]{4,2},
                            new int[]{2,1,12,123,}};

如上代码,int[]是数据类型,它之后的[]声明了一个int[]类型的数组,

(4.5)数组的使用

 Length表示数组中元素的总数,比如有一个大小为2*3*3的三维数组,返回的值就是18,但是在对于交错数组来说,它返回的是外部数组的元素数,所以上述的cells的交错数组返回的长度是3.因为交错数组是数组构成的数组。只统计它的元素数(也就是具体由多少个数组构成),而不管各内部数组共包含了多少个元素。 

注意使用BinarySearch方法之前要对数组进行排序,如果不按照升序排序会返回不正确的索引。

使用Clear()方法的时候不是删除数组的元素,而且也不将数组的长度置为0,因为数组大小是固定的,不能修改,他只是将数组中的每个元素设成数组类型的默认值。这也解释了在调用这个方法之后输出数组的时候Console.WriteLine()方法为什么会键一个空行。

 

在获取数组特定维的长度的时候使用GetLength()实例方法,指定返回某维的长度,比如cells.GetLength(1)=3。Rank则是整个数组的维数,cells.Rank=3;

默认情况下,将一个数组变量赋值给另一个数组变量只会复制数组的引用,但是使用Clone()方法会返回数组的一个全新副本,更改这个副本中的任何成员都不会影响原始数组的成员。

 

c#基础之数据类型

上一篇:Excel催化剂开源第44波-窗体在Show模式下受Excel操作影响变为最小化解决方式


下一篇:Windows异常处理机制简介