C#语言的新特性

c# 语言新特性

.NET Framework

可空类型:

对于值类型而言,在定义的同时必须要赋初值,否则可能无法通过编译,但是在某系情况下,我们不知道它的值是多少
比如事先不知道学生的具体年龄,这个时候把学生年龄定义为可空类型就很重要啦
1:值类型包括:int/double/float/char/decimal/bool

2:可空类型语法:Nullable<T>,T代表上面具体的某种类型(值类型)
比如:Nullable<bool> isTrue 就是一个可以为空的bool类型变量

3:可空类型,在赋值的时候我们可以将null赋值给它
例如:Nullable<int> age=null;

4:Nullable<T>,可以简写为:
int? age=null 完全等价于Nullable<int> age=null;

5: 下面这种写法是错误的,因为string 是引用类型,只有值类型才可以定义为可空类型

string? name=null;

6:可空类型的常用属性及方法

1:Value 获取字段的值,如果该字段为null,那么调用value属性编译时会报错
2:HasValue 布尔类型,如果字段不为null,返回true,否则返回false
3:GetType() 获取字段的类型,如果该字段为null,那么调用GetType方法编译时会报错

泛型类:
List<T>:T代表任何类型:比如int/bool/string/Student(对象)。。。。

Dictionary<T,K>:字典类 其中T,K指代任意类型


对象初始化器:
在实例化一个类的同时,就给它的属性赋值

集合初始化器:
在实例化一个集合对象的同时,给它指定元素

匿名类型:
var person = new { Name = "张三", Age = 20, Address = "重庆市沙坪坝" };

Lambda表达式:
例子:
int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var data = array.Where(item => item % 2 != 0);
data.ToList().ForEach(item => Console.WriteLine(item));

Lambda表达式分为3部分:Lambda的本质其实是匿名类型

参数 | => | 表达式

//用Lambda表达式改写了我们的委托
CalculateHandler cal = (num1, num2) => num1 + num2;

注意1:如果Lambda表达式只有一个参数,那么参数可以不用()包裹
注意2:Lambda表达式部分可以使用{}包裹,也可以不包裹。如果有多行代码,必须使用{}包裹起来

在什么时候可以使用Lambda表达式:?
在出现委托(Func参数的地方),我们就可以使用Lambda表达式

var 关键字:
1:var用于定义变量,变量的具体类型根据值的类型来决定
var test = 1; //test就是int类型
var test1 = "小明"; //test1就是string类型;
2:注意1:var b;这种写法是错误的,原因是var声明的变量必须在定义的时候就初始化。
注意2:通过var 声明的变量一旦实例化后,就不能再更改它的数据类型
例如: var b = 1; b = "张三"; b="张三"会报错

扩展类
动态类型

委 托:
什么是委托:委托就是允许将一个方法作为参数,传递给另外一个方法

原文地址:https://www.cnblogs.com/hongjiaojiao/p/9755504.html