Open zhangchao19781124 opened 6 years ago
1.单问号(?) 1.1 单问号运算符可以表示:可为Null类型,C#2.0里面实现了Nullable数据类型
//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型。 private int getNum = null;
//B.如果修改为下面的写法就可以初始指为null,在特定情况下?等同于基础类型为Nullable。 private int? getNum = null; private Nullable getNumNull = null; 1.2 单问号运算符表示三元运算符
//A.需要if语句来判断,当Request.Params["para"]不为null时,取出para的值。 string strParam =Request.Params["para"]; if ( strParam== null ) { strParam= ""; }
//B.用三元运算符?简化写法,取出para的值。 string strParam=Request.Params["para"] == null ? "":Request.Params["para"]; 2.双问号(??)
?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
可以为 null 的类型可以包含值,或者可以是未定义的。?? 运算符定义当可以为 null 的类型分配给非可以为 null 的类型时返回的默认值。如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。如果使用强制转换,且当前还未定义可以为 null 值的类型,则会引发InvalidOperationException 异常。
//A.定义getNum为null,输出结果为0 private int? getNum = null; Console.WriteLine(getNum ?? 0);
//B.定义getNum为1,输出结果为1 private int getNum = 1; Console.WriteLine(getNum ?? 0);
3.lamba语法中下划线(_) Lambda表达式
λ:希腊字母表中排序第十一位的字母,英语名称为Lambda。最早出现是用于计算的λ演算(lambda calculus),后来被函数式编程语言广泛采用。
Lambda表达式可以理解成为是一个能够作为参数传递的匿名函数Object,他没有名字,但有参数列表、有函数体、有返回类型、可以抛出异常。它的类型,叫做“目标类型(target type)”Java8中就是“函数接口(functional interface)”。
语法:
引用 (parameters) -> expression (parameters) -> statement (parameters) -> { statements; }
举例:
引用 () -> Math.PI 2.0 (int i) -> i 2 (String s) -> s.length() (int i0, int i1) -> i0 + i1 (int x, int y) -> { return x + y; }
①省略类型
Java代码 收藏代码 (int x, int y) -> { return x + y; }; (x, y) -> { return x + y; };
***不能只省略一部分类型,比如:(int x, y) -> { return x + y; }; // NG
②1个参数可以省略括号
Java代码 收藏代码 (String text) -> { System.out.println(text); }; (text) -> { System.out.println(text); }; text -> { System.out.println(text); };
***但是不能带类型,比如:String text -> { System.out.println(text); }; // NG
③函数体多行时需要大括号
Java代码 收藏代码 (int i) -> { int prod = 1; for(int n = 0; n < 5; n++) prod *= i; return prod; };
④函数体只有一行的话可以省略大括号
Java代码 收藏代码 text -> System.out.println(text);
assert语句不能省略带括号,比如: s -> { assert !s.isEmpty(); }; return语句不能省略带括号,比如:(x, y) -> return x -y; // NG
⑤只有一行代码而且有返回值的可以省略return,会返回该行代码计算结果
Java代码 收藏代码 (x, y) -> { return x -y; }; (x, y) -> x -y;
***return要和大括号一起省略,比如:(x, y) -> { x - y; }; // NG
⑥没有参数没有返回值的空函数
Java代码 收藏代码 () -> {};
⑦Scala等使用下划线做占位符
() -> System.out.println(); // NG
1.单问号(?) 1.1 单问号运算符可以表示:可为Null类型,C#2.0里面实现了Nullable数据类型
//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型。 private int getNum = null;
//B.如果修改为下面的写法就可以初始指为null,在特定情况下?等同于基础类型为Nullable。 private int? getNum = null; private Nullable getNumNull = null;
1.2 单问号运算符表示三元运算符
//A.需要if语句来判断,当Request.Params["para"]不为null时,取出para的值。 string strParam =Request.Params["para"];
if ( strParam== null )
{
strParam= "";
}
//B.用三元运算符?简化写法,取出para的值。 string strParam=Request.Params["para"] == null ? "":Request.Params["para"]; 2.双问号(??)
?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
可以为 null 的类型可以包含值,或者可以是未定义的。?? 运算符定义当可以为 null 的类型分配给非可以为 null 的类型时返回的默认值。如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。如果使用强制转换,且当前还未定义可以为 null 值的类型,则会引发InvalidOperationException 异常。
//A.定义getNum为null,输出结果为0 private int? getNum = null; Console.WriteLine(getNum ?? 0);
//B.定义getNum为1,输出结果为1 private int getNum = 1; Console.WriteLine(getNum ?? 0);
3.lamba语法中下划线(_) Lambda表达式
λ:希腊字母表中排序第十一位的字母,英语名称为Lambda。最早出现是用于计算的λ演算(lambda calculus),后来被函数式编程语言广泛采用。
Lambda表达式可以理解成为是一个能够作为参数传递的匿名函数Object,他没有名字,但有参数列表、有函数体、有返回类型、可以抛出异常。它的类型,叫做“目标类型(target type)”Java8中就是“函数接口(functional interface)”。
语法:
引用 (parameters) -> expression (parameters) -> statement (parameters) -> { statements; }
举例:
引用 () -> Math.PI 2.0 (int i) -> i 2 (String s) -> s.length() (int i0, int i1) -> i0 + i1 (int x, int y) -> { return x + y; }
①省略类型
Java代码 收藏代码 (int x, int y) -> { return x + y; };
(x, y) -> { return x + y; };
***不能只省略一部分类型,比如:(int x, y) -> { return x + y; }; // NG
②1个参数可以省略括号
Java代码 收藏代码 (String text) -> { System.out.println(text); };
(text) -> { System.out.println(text); };
text -> { System.out.println(text); };
***但是不能带类型,比如:String text -> { System.out.println(text); }; // NG
③函数体多行时需要大括号
Java代码 收藏代码 (int i) -> {
int prod = 1;
for(int n = 0; n < 5; n++) prod *= i;
return prod;
};
④函数体只有一行的话可以省略大括号
Java代码 收藏代码 text -> System.out.println(text);
assert语句不能省略带括号,比如: s -> { assert !s.isEmpty(); }; return语句不能省略带括号,比如:(x, y) -> return x -y; // NG
⑤只有一行代码而且有返回值的可以省略return,会返回该行代码计算结果
Java代码 收藏代码 (x, y) -> { return x -y; };
(x, y) -> x -y;
***return要和大括号一起省略,比如:(x, y) -> { x - y; }; // NG
⑥没有参数没有返回值的空函数
Java代码 收藏代码 () -> {};
⑦Scala等使用下划线做占位符
() -> System.out.println(); // NG