奇奇怪怪的运算符和表达式
我是看我师傅的项目中他用了一些奇奇怪怪的问号,我脑袋上也有了很多奇奇怪怪的问号。于是这篇博客就出来了。
首先c#版本需要是c# 8.0以上或者.NET Core 3.x
微软的版本控制文档>>>>版本控制
微软关于运算符的文档>>>>关于运算符和表达式的文档
微软关于运算符的文档2>>>>关于运算符和表达式的文档2
配置&准备工作
目前是使用是VS2019,创建的是 .NET Core程序,版本是Core 3.1,至少是Core3.1才可以使用c# 8.0的语法,.NET Framework 的C# 语言版本的默认值 是c# 7.3 。
暂时不知道如何升级c# 语言版本
创建一个 .NET Core 控制台程序就行了。然后在 项目§>> 项目属性,看一下目标框架是不是符合的。

? 的名字是:可为空的值类型
文档>>? 的文档
单 一个问号表示可空类型,
比如:你要给 int 一个空值,是会报错的,但是在int后面加上?就成了可空类型,他就可以为空。
他是会报错的
就像上面这样,然是在后面加一个 ? 就不会报错了
但是这里需要注意,A的类型已经不是int 类型了,他成了 int?
然后多写几行看一下

A是空的哦。
?? 的名字是:合并运算符
文档>>?? 的文档
解释不清楚,看代码
解释一下,在25行,如果a不为空则c=a,否则c=b
测试一下a不为空
a不为空,那么c=a,打印出a的值
然后如果是if-else

会不会好理解一些?
??= 的名字是:空合并赋值运算符
文档>> ??= 的文档
?? 和 ??=的文档在一个网页上
代码如图
如果a为空那么c=b,否则c=a,我的理解是这样,感觉很 ?? 一样。
?. 的名字是:条件运算符
文档>>?. 的文档
在中间,可以通过目录找到他
?. 仅当操作数为非 null 时才用于执行成员或元素访问运算
代码如图
当a为空的时候并没有在第49行抛出a是空引用的异常,然后在第52行给a值之后,在53行将a换成了string然后打印了出来。
?[] 的名字是:null 条件运算符
文档>>?[]的文档
看了文档很久,也试了几下但是我是真菜。
?:的名字是:条件运算符
文档>>?: 文档
如果满足?左边的表达式,则返回冒号左边的值,否则返回冒号右边的值。
:: 命名空间别名限定符
- 作用:用于显式指定命名空间别名,避免命名冲突。
- 示例:
using MyAlias = System.Collections.Generic; MyAlias::List<int> list = new MyAlias::List<int>(); - 文档::: 的文档
=> Lambda 运算符
- 作用:
- Lambda 表达式:用于定义匿名函数。
- 表达式主体定义:用于简化方法或属性的实现。
- 形式:
- 有参数的 Lambda 表达式:
Func<int, int> square = x => x * x; Console.WriteLine(square(5)); // 输出 25 - 无参数的 Lambda 表达式:
Action greet = () => Console.WriteLine("Hello!"); greet(); // 输出 "Hello!"
- 有参数的 Lambda 表达式:
- 文档:
位运算符
>> 右移运算符
- 作用:将二进制数向右移动指定位数,左侧补 0。
- 示例:
int a = 8; // 二进制 1000 int b = a >> 2; // 二进制 0010,十进制 2 Console.WriteLine(b); // 输出 2
<< 左移运算符
- 作用:将二进制数向左移动指定位数,右侧补 0。
- 示例:
int a = 2; // 二进制 0010 int b = a << 2; // 二进制 1000,十进制 8 Console.WriteLine(b); // 输出 8
| 位或运算符
- 作用:对两个数的二进制位进行按位或运算。
- 示例:
int a = 5; // 二进制 0101 int b = 3; // 二进制 0011 int c = a | b; // 二进制 0111,十进制 7 Console.WriteLine(c); // 输出 7
|| 位或运算符
在if中的使用,任意条件满足时进入 if 语句。
bool 吃饭=true;
bool 睡觉=false;
if(吃饭==false|| 睡觉==true)
{
Console.WriteLine("打豆豆");
}
^ 异或运算符
- 文档:^ 异或运算符
- 作用:对两个数的二进制位进行按位异或运算。
- 示例:
int a = 5; // 二进制 0101 int b = 3; // 二进制 0011 int c = a ^ b; // 二进制 0110,十进制 6 Console.WriteLine(c); // 输出 6
! 取反运算符
- 文档:逻辑非运算符
- 作用:对布尔值或二进制位进行取反操作。
- 示例:
bool a = true; bool b = !a; // false Console.WriteLine(b); // 输出 False
++ 与 +1 运算符
- 作用:
++:自增运算符,分为前缀(++a)和后缀(a++)。+1:加法运算符,用于数值加 1。
- 示例:
int a = 5; int b = a++; // b = 5, a = 6 int c = ++a; // c = 7, a = 7 int d = a + 1; // d = 8
% 取模运算符
- 作用:返回两个数相除的余数。
- 示例:
int a = 10; int b = 3; int c = a % b; // c = 1 Console.WriteLine(c); // 输出 1
[] 索引运算符
- 作用:用于访问数组、列表或字典中的元素。
- 示例:
int[] array = { 1, 2, 3 }; Console.WriteLine(array[0]); // 输出 1 Dictionary<string, int> dict = new Dictionary<string, int> { { "a", 1 }, { "b", 2 } }; Console.WriteLine(dict["a"]); // 输出 1
# 预处理指令
- 作用:用于编译器预处理,如
#define、#if、#region等。 - 示例:
#define DEBUG #if DEBUG Console.WriteLine("Debug mode"); #endif
@ 逐字字符串标识符
- 作用:用于定义逐字字符串,忽略转义字符。
- 示例:
string path = @"C:\Users\Example\Documents"; Console.WriteLine(path); // 输出 C:\Users\Example\Documents
$ 字符串插值
- 作用:用于简化字符串拼接,直接在字符串中嵌入表达式。
- 示例:
string name = "Alice"; int age = 25; string message = $"{name} is {age} years old."; Console.WriteLine(message); // 输出 "Alice is 25 years old."
本文详细介绍了C#8.0中的新特性,包括各种运算符的使用方法及应用场景,例如可为空的值类型(?)、合并运算符(??)、空合并赋值运算符(??=)等。此外还探讨了条件运算符(?.)、null条件运算符(?[])、条件运算符(?:)、命名空间别名限定符(::)和lambda表达式(=>)等高级特性。

被折叠的 条评论
为什么被折叠?



