概述

类型系统

1.泛型

2.可空类型

可空值类型,可空引用类型

// 两者等价
int? a; 
Nullable<int> a;

// 如果a不是null,那么b等于a,否则b等于3
int? b = a ?? 3;

3.隐式局部变量

var a = 1;

4.匿名类型

临时的数据类型,不能用作方法的返回值,因为只是在方法内的临时结构

var book = new { Title = "Test"};
var title = book.Title;

5.元组

元组是值类型变量,可以作为方法的返回值

var book = (title:"Title",price:2f); 
Console.WriteLine(book.price);

简化代码

构造与初始化

1.委托

button.click += new EventHandler(handle); // C#1
button.click += handle; //c#2 方法转换
button.click += delegate{...} //c#2 匿名方法
button.click += ()=>{...} //c#3 lambda表达式

2.对象初始化器/集合初始化器

// 老代码
var student = new Student();
student.name = "Test";

// 新代码
var student = new Student(){name = "Test"};

方法与属性

1.自动申明

// c#1
private string name;
public string Name
{
    get{return name;}
    set{name=vale;}
}

// 自动申明
public string Name {get;private set};

2.表达式主体成员

private List<int> list;

// 老代码
public int GetCount()
{
    return list.Count;
}

// 表达式主体成员
public int count => list.Count;

字符串

1.nameof

获取变量、类型、方法等名称,重构起来特别方便

2.内嵌字符串

private int price = 2;
private string str = $"price is {price}";// price is 2

LINQ

异步

  • 标记为async的方法会生成一个返回值,一般是Task或者Task<T>,这部分不需要人工介入
  • 使用await关键字等待Task完成

例:

private async Task Update()
{
    Task<Weather> task1 = GetWeatherAsync();
    Task<Email> task2 = GetEmailAsync();
    
    Weather weather = await task1;
    Email email = await task2;
    
    weatherText.text = weather.text;
    emailText.text = email.text;
}