C# 运算符
1、? 可空运算符
C# 中,有两种类型的变量。
基本类型和引用类型
基本类型变量在定义一个变量的时候,不允许将该变量设置为null。
但是在有的时候,我们又希望该基本类型拥有可以为null的能力。
所以我们在 该基本类型后面 加? 就可以将该基本类型变成应用类型。
如 int => int? long => long? 等
此时 int? 定义的变量,就是引用类型了,可以为null,而不再是一个基本的类型。
所有的基本类型转换成的引用类型,都有value这个属性,该属性是该引用的值。
所有 datetime = datetime?.value
2、?? null 合并运算符
如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数
1 int? x = null; 2 3 // Set y to the value of x if x is NOT null; otherwise, 4 // if x = null, set y to -1. 5 int y = x ?? -1; 6 7 // Assign i to return value of the method if the method's result 8 // is NOT null; otherwise, if the result is null, set i to the 9 // default value of int. 10 int i = GetNullableInt() ?? default(int); 11 12 string s = GetStringValue(); 13 // Display the value of s if s is NOT null; otherwise, 14 // display the string "Unspecified". 15 Console.WriteLine(s ?? "Unspecified");
3、=> lambda 运算符
该标记在 lambda 表达式中用来将左侧的输入变量与右侧的 lambda 体分离。 Lambda 表达式是与匿名方法类似的内联表达式,但更加灵活;在以方法语法表示的 LINQ 查询中广泛使用了 Lambda 表达式。
1 string[] words = { "cherry", "apple", "blueberry" }; 2 3 // Use method syntax to apply a lambda expression to each element 4 // of the words array. 5 int shortestWordLength = words.Min(w => w.Length); 6 Console.WriteLine(shortestWordLength); 7 8 // Compare the following code that uses query syntax. 9 // Get the lengths of each word in the words array. 10 var query = from w in words 11 select w.Length; 12 // Apply the Min method to execute the query and get the shortest length. 13 int shortestWordLength2 = query.Min(); 14 Console.WriteLine(shortestWordLength2); 15 16 // Output: 17 // 5 18 // 5
备注:
=> 运算符具有与赋值运算符 (=) 相同的优先级,并且是右结合运算符。
可以显式指定输入变量的类型或让编译器推断类型;仍,该变量是强类型在编译时。 当指定类型时,必须将该类型括号中的名称和变量名,如下例所示。
1 int shortestWordLength = words.Min((string w) => w.Length);
下面的代码演示如何编写采用两个参数标准查询运算符 Enumerable.Where 的超加载的 lambda 表达式。 由于 lambda 表达式具有多个参数,必须括在括号中的参数。 第二个参数,index,表示当前元素的索引集合中的。 Where 表达式返回长度小于其在数组的索引位置小于的任何字符串。
1 static void Main(string[] args) 2 { 3 string[] digits = { "zero", "one", "two", "three", "four", "five", 4 "six", "seven", "eight", "nine" }; 5 6 Console.WriteLine("Example that uses a lambda expression:"); 7 var shortDigits = digits.Where((digit, index) => digit.Length < index); 8 foreach (var sD in shortDigits) 9 { 10 Console.WriteLine(sD); 11 } 12 13 // Compare the following code, which arrives at the same list of short 14 // digits but takes more work to get there. 15 Console.WriteLine("\nExample that uses a for loop:"); 16 List<string> shortDigits2 = new List<string>(); 17 for (var i = 0; i < digits.Length; i++) 18 { 19 if (digits[i].Length < i) 20 shortDigits2.Add(digits[i]); 21 } 22 23 foreach (var d in shortDigits2) 24 { 25 Console.WriteLine(d); 26 } 27 // Output: 28 // Example that uses a lambda expression: 29 // five 30 // six 31 // seven 32 // eight 33 // nine 34 35 // Example that uses a for loop: 36 // five 37 // six 38 // seven 39 // eight 40 // nine 41 }
不断补充更新