C#中几个比较高阶的操作符

1、条件操作符,也是三元操作符
格式 //condition?consequence:alternative
举例:

  bool result;
  int a = 10, b = 20;
  result = a > b ? true : false;

2、空接合操作符(输出的结果一定不为null)
格式 //expression1??expression2

  string str = GetName() ?? "default";
  string str2 = GetName() ?? GetName2();

3、 null条件操作符(考虑调用成员的方法或者属性之间都要先判断是否为空而来)

 string[] Array1 = new string[] { "1", "2" };
        string[] Array2 = new string[] { };
        int? length = Array1?.Length;//Array1如果为null则返回0,如果不为null,则返回int?可空类型
        int? length2 = Array2?.Length;//Array2如果为null则返回0,正常情况下不可能为0,所以我们可以根据返回的结果是否为0来判断,如果不为null,则返回int?可空类型
  int? length3 = Array2[0]?.Length;//会报错,错误是超出索引界限,所以这里要尽量避免Null条件操作符和索引操作符一起使用

4、null条件操作符和委托
为什么要对委托进行Null值得判断?
第一种情况(就是容易出现问题的情况)
public delegate void GetMaxDelegate();

  public event GetMaxDelegate getMaxEvent;
  getMaxEvent += TestDelegate1;
  getMaxEvent += TestDelegate2;

  if(getMaxEvent!=null)
     {
       getMaxEvent -= TestDelegate1;//可能在另一个线程发生
       getMaxEvent -= TestDelegate2;//可能在另一个线程发生
       getMaxEvent();//会报错,错误为System.NullReferenceException
     }

第二种情况(传统对委托的判断,事件是特殊的委托))

   getMaxEvent += TestDelegate1;
    getMaxEvent += TestDelegate2;
    GetMaxDelegate getMaxEvent2 = getMaxEvent;

    if(getMaxEvent2 !=null)
    {
        getMaxEvent -= TestDelegate1;
        getMaxEvent -= TestDelegate2;
        getMaxEvent2();
    }

因为执行 getMaxEvent -= TestDelegate1操作的时候,会让getMaxEvent指向全新的委托,而不会更改原始的委托,这样getMaxEvent2因为指向原始的委托,所以也不会发生更改。
第三种情况(使用null条件操作符实现和第二种情况一样的效果)

  getMaxEvent += TestDelegate1;
  getMaxEvent += TestDelegate2;
  getMaxEvent?.Invoke();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值