.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."

.net 表达式返回值和等号赋值的区别的更多相关文章

  1. JavaScript 之 回调函数的返回值给全局变量赋值问题

    jQuery 中,会遇到$.get(url,data,callback,type) 或 $.post(url,data,callback,type) 返回值给全局变量赋值的问题: 例如: <sc ...

  2. try--catch--finally中return返回值执行的顺序(区别)

    1.try块中没有抛出异常,try.catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static int ...

  3. 将AJAX返回值纵向排序赋值给Table标签

    /*下面是所有拼接这个表的代码*/ 1 function HandelAjaxReturnDataForContentTable(data) { var shareHtml = "" ...

  4. mybatis <sql /> 配置中 返回值 resultType 与resultMap的区别

    mybatis的objectMapper.xml中, 1) 若<sql /> 查询语句中配置的是resultType=“实体类/DTO” ,则从mybatis返回的键值对结果集(Map)会 ...

  5. python自增自减?赋值语句返回值?逗号表达式?

    咳咳,直接进入正题吧. 自增自减(++/--),以及赋值语句,还有逗号表达式都是在C/C++中常见的运算符或表达式. 熟悉C/C++的小伙伴们都知道,在C/C++中: 自增自减(前缀/后缀)运算符将实 ...

  6. el表达式获取对象属性值 返回值类型

    实现 数字页码时 遇到的一个问题. 后端servlet 在request.setAttribute("page",page); page 为pagebean的实例对象,pagebe ...

  7. [shell]管道连接的命令判断返回值

    场景: 在bash执行管道连接的命令,需要获取到各个命令的返回值用于判断 在脚本中我们可能需要将执行结果打印到屏幕,同时保存在文件中供后面分析用,写出如下的命令 command 2>&1 ...

  8. PYTHON-错误-函数有返回值未接收导致替换不成功

    #1.有返回值,没有赋值,替换不成功 cxj = 'guapi' cxj.replace(cxj,'2b') print(cxj) #2.有返回值,赋值,替换成功 cxj = 'guapi' cxj ...

  9. 构建器Constructor的返回值/构建器

    构建器Constructor的返回值? 为什么会有这个问题? 在<Thinking in Java>中文Quanke翻译版本第四章初始化和清除,原书第五章Initialization&am ...

随机推荐

  1. HDU 1114

    在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持.该活动的主要收入来自于 Irreversibly Bound Money (IBM).思路很简单.任何时候,某位 ACM 会员有少量的钱时 ...

  2. python 回调函数,最简单的例子

    回调的英文定义: A callback is a function that is passed as an argument to another function and is executed ...

  3. mysql日志介绍

    1. 错误日志 错误日志记录的事件: a. 服务器启动关闭过程中的信息 b. 服务器运行过程中的错误信息 c. 事件调试器运行一个事件时间生的信息 d. 在从服务器上启动从服务器进程时产生的信息 2. ...

  4. 【数据结构】B-Tree, B+Tree, B*树介绍 转

    [数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是浮云,目前Mysql的MyISAM和InnoDB都支持B-Tre ...

  5. oracle数据库调整字段顺序

    oracle数据库调整字段顺序 https://blog.csdn.net/xiaobaixie/article/details/77892034

  6. C++ Com控件调用

    1.假如我们创建的Com组件的工程名叫TestCom,在其中添加了一个接口叫MyCom,接口名会自动命名为IMyCom,在其中添加两个方法,分别为: HRESULT Add([in] long n1, ...

  7. Servlet中request对象得到路径问题

    1.项目源码:假设现在有一个名为JavaWeb的项目,其中有一个名为TestServlet的serlvet,其doGet方法为: protected void doGet(HttpServletReq ...

  8. 7、Kafka、AMQ、RabbitMQ对比

    Kafka AMQ RabbitMQ 应用场景 AMQ/RabbitMQ Kafka

  9. Python IO内核交互了解

    注:Unix \ Linux 环境下的network IO   用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系 ...

  10. zabbix 配置本地邮箱报警

    Centos 6.5, Zabbix 3.0.4 后台配置email 浏览器登录zabbix后台,Administration -> Media types -> Email: 比较简单的 ...