? ?? ??= ?. ?[] ?: :: => >> << ~ | < > || && ^ ! ++ -- % [] 什么东西

本文详细介绍了C#8.0中的新特性,包括各种运算符的使用方法及应用场景,例如可为空的值类型(?)、合并运算符(??)、空合并赋值运算符(??=)等。此外还探讨了条件运算符(?.)、null条件运算符(?[])、条件运算符(?:)、命名空间别名限定符(::)和lambda表达式(=>)等高级特性。

奇奇怪怪的运算符和表达式

我是看我师傅的项目中他用了一些奇奇怪怪的问号,我脑袋上也有了很多奇奇怪怪的问号。于是这篇博客就出来了。
首先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不为空
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 运算符

  • 作用
    1. Lambda 表达式:用于定义匿名函数。
    2. 表达式主体定义:用于简化方法或属性的实现。
  • 形式
    • 有参数的 Lambda 表达式
      Func<int, int> square = x => x * x;
      Console.WriteLine(square(5)); // 输出 25
      
    • 无参数的 Lambda 表达式
      Action greet = () => Console.WriteLine("Hello!");
      greet(); // 输出 "Hello!"
      
  • 文档

位运算符

>> 右移运算符

  • 作用:将二进制数向右移动指定位数,左侧补 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."
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值