C#从入门到放弃4

C#中的枚举

1
2
3
enum Season { Spring, Summer, Fall, Winter}; //声明枚举
Season colorful = Season.fall;
Console.WriteLine(Colorful); //可自动匹配

一般情况下枚举第一个元素对应0,也可显示指定

1
enum Season : short { Spring, Summer, Fall, Winter}

枚举的数据类型可以基于8种整数类型

C#中的结构

1
2
3
4
struct Time
{

}

结构主要实现“值”的概念,对于简单的数据使用结构可以节省开销。

C#中结构和类

  • 不能为结构声明无参构造,编译器会自动生成一个,为所有字段赋值;
  • 在非默认构造中,必须初始化所有字段;
  • 结构中不能声明一个字段时同时进行初始化。
    1
    2
    3
    4
    5
    6
    //声明一个结构体
    struct time
    {

    }
    time t; //C#中不需typedef

构造器初始化

1
2
3
4
Time now = new Time();   //调用构造
Time now; //不调用

//虽然是new出来的,然而依然是值类型,数据在栈上。

Console.WriteLine()自动调用ToString方法

结构复制

1
2
Time now = new Time(12, 30);
Time copy = now;

前提是右侧的结构字段都初始化了。

C#数组

1
2
3
4
5
6
7
8
int[] pins;
pins = new int[4];
pins = new int[4]{9, 3, 2, 1};//大括号力的数值的数量必须和创建的数组实例的大小完全匹配
pins = new int[4]{random%10,random%10,random%10,random%10}; //可以是运行时计算的值
int[] pins = {9, 3, 7, 2}l
Time[] s = {new Time(12, 30), new Time(5, 30)};
var names = new[]{"a", "b", "c"};//隐式推断
var name = new[]{new {Name = "John", Age = 44}}; //数组元素都是匿名类型。

数组的大小不是声明的一部分,数组是引用类型。
在声明一个引用类型的时候,不会马上为对象分配内存,只有在用new关键字创建实例的时候,才会真正分配,所以在声明一个数组变量的时候不需要声明它的大小,只有在实际创建数组的时候才可以指定数组的大小。

foreach语句

1
2
3
4
5
int[] pins = {9, 3, 7, 2};
foreach(int pin in pins)
{
Console.WriteLine(pin);
}

foreach语句声明了一个循环变量,自动获取数组中每个元素的值,变量类型必须与数组元素类型相匹配。

复制数组

数组是引用类型,这意味着在复制了一个数组变量得到对同一个数组的两个引用,真实的复制数组需要一个一个赋值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//for一个一个赋值
int[] pins = {9, 3, 7, 2};
int[] copy = new int[pins.Length];
for(int i = 0;i<copy.Length;i++)
{
copy[i] = pins[i];
}

//CopyTO方法赋值
pins.CoptTo(copy, 0);

//Copy方法复制
Array.Copy(pins, copy, copy.Length);

//Clone方法复制
int[] copy = (int[])pins.Clone();

以上都为浅拷贝

多维数组

1
2
3
4
int[,] items = new int[4, 6];//声明数组,4行6列
item[2, 4] = 99;
item[2, 4] = item[3, 4];
item[2, 4]++;

集合类

  • ArrayList//类似链表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ArrayList number = new ArrayList();
    number.Add(1); //添加元素
    number.Insert(number.Count-1, 99); //在索引Count-1处插入元素
    number.Remove(7); //移除值为7的第一个元素
    number.RemoveAt(6); //移除索引为6的元素,即第7个元素
    //使用foreach便利当前的11个元素
    foreach(int number in numbers)
    {
    Console.WriteLine(number);
    }
  • Quene

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Quene numbers = new Quene();
    numbers.Enquene(1); //加入队列
    //遍历队列
    foreach(int number in numbers)
    {

    }

    //出队队列
    number.Dequeue();
  • Stack集合类

    1
    2
    3
    4
    5
    6
    7
    Stack number = new Stack();
    numbers.Push(1); //入栈
    numbers.Pop(); //出栈
    foreach(int number in number)
    {
    Console.WriteLine(number);
    }
  • Hashtable类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Hashtable ages = new Hashtable();
    //填充1
    ages["asa"] = 44;

    //遍历,返回的是DictionaryEntry,它允许通过Key属性和Value属性进行元素访问
    foreach(DictionaryEntry element in ages)
    {
    string name = (string)element.Key;
    int age = (int)element.Value;
    Console.WriteLine("Name: {0}, Age: {1}", name, age);-
    }
-------------本文结束感谢您的阅读-------------