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="张三"会报错
扩展类
动态类型
委 托:
什么是委托:委托就是允许将一个方法作为参数,传递给另外一个方法