• .net 表达式返回值和等号赋值的区别


    .net 7.0的新特性中,有一个使用表达式体返回值的操作。请看如下代码:

    private string _userName="";
    public string UserName{
        get=>_userName;
        set=>_userName=value;
    }
    
    public TEntity entity=>new TEntity();

    这样看起来是不是和使用等号(=)获取值一样的方便。

    但是,请不要认为使用表达式体(=>)获取值和用等号(=)获取值是一样的概念,那你会被坑惨!

    针对引用类型来说,因为使用表达式体(=>)获取的值都不是同一个对象,而使用等号(=)获取的值都是同一个对象。每次使用表达式体(=>)获取的值都是一个全新的,而使用等号(=)获取的都是同一个。

    被坑了才知道去了解!

    测试实例如下:

            public class MyClass
            {
                public object ExpressionObject => new object();
                public object NormalObject = new object();
            }
    
    
            static void Main(string[] args)
            {
                MyClass tmp =new MyClass();
                //对比同一个实例的表达式返回对象是否相同,结果是 引用对象不相同
                object eobj1 = tmp.ExpressionObject;
                object eobj2 = tmp.ExpressionObject;
                Console.WriteLine($"=>表达式的结果: {eobj1 == eobj2}");
    
                //对比同一个实例的直接赋值对象是否相同,结果是 引用相同的对象
                object nobj1 = tmp.NormalObject;
                object nobj2 = tmp.NormalObject;
                Console.WriteLine($"=等号赋值的结果:{nobj1 == nobj2}");
    
                Console.ReadKey();
            }

    测试结果:

    特别要记得这点,如果是在并发同步编程中,一定要记得这点区别。因为锁对象不一致的情况下,程序是要报SynchronizationLockException这个异常的,内容是"Object synchronization method was called from an unsynchronized block of code." 

  • 相关阅读:
    python下正则表达式的随笔记录
    python下的appium控制andriod按键
    支付测试的测试要点记录
    python3的基础数据类型
    【推荐】推荐学习的公众号
    pycharm 配置 github
    python3 字符串格式化
    python 系统设置
    python3 使用SimpleHTTPServer搭建web服务器
    1.6前瞻后顾
  • 原文地址:https://www.cnblogs.com/williamwsj/p/9714780.html
Copyright © 2020-2023  润新知