.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."
.net 表达式返回值和等号赋值的区别的更多相关文章
- JavaScript 之 回调函数的返回值给全局变量赋值问题
jQuery 中,会遇到$.get(url,data,callback,type) 或 $.post(url,data,callback,type) 返回值给全局变量赋值的问题: 例如: <sc ...
- 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 ...
- 将AJAX返回值纵向排序赋值给Table标签
/*下面是所有拼接这个表的代码*/ 1 function HandelAjaxReturnDataForContentTable(data) { var shareHtml = "" ...
- mybatis <sql /> 配置中 返回值 resultType 与resultMap的区别
mybatis的objectMapper.xml中, 1) 若<sql /> 查询语句中配置的是resultType=“实体类/DTO” ,则从mybatis返回的键值对结果集(Map)会 ...
- python自增自减?赋值语句返回值?逗号表达式?
咳咳,直接进入正题吧. 自增自减(++/--),以及赋值语句,还有逗号表达式都是在C/C++中常见的运算符或表达式. 熟悉C/C++的小伙伴们都知道,在C/C++中: 自增自减(前缀/后缀)运算符将实 ...
- el表达式获取对象属性值 返回值类型
实现 数字页码时 遇到的一个问题. 后端servlet 在request.setAttribute("page",page); page 为pagebean的实例对象,pagebe ...
- [shell]管道连接的命令判断返回值
场景: 在bash执行管道连接的命令,需要获取到各个命令的返回值用于判断 在脚本中我们可能需要将执行结果打印到屏幕,同时保存在文件中供后面分析用,写出如下的命令 command 2>&1 ...
- PYTHON-错误-函数有返回值未接收导致替换不成功
#1.有返回值,没有赋值,替换不成功 cxj = 'guapi' cxj.replace(cxj,'2b') print(cxj) #2.有返回值,赋值,替换成功 cxj = 'guapi' cxj ...
- 构建器Constructor的返回值/构建器
构建器Constructor的返回值? 为什么会有这个问题? 在<Thinking in Java>中文Quanke翻译版本第四章初始化和清除,原书第五章Initialization&am ...
随机推荐
- 编译器将"+"转换成了StringBuilder类
MapReduce map100% Reduce 66% 卡死 如果你碰到map100%,reduce 66% 然后程序就貌似停止在这里了,可能是由于在Reduce类里使用了String造成的 根据一 ...
- Gitlab构建分布式版本控制系统
一 安装依赖 1.sudo yum install curl policycoreutils openssh-server openssh-clients 2.sudo systemctl enabl ...
- 探讨JS合并两个数组的方法
我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...
- Unicode编码与中文互转
/** * unicode编码转换为汉字 * @param unicodeStr 待转化的编码 * @return 返回转化后的汉子 */ public static String UnicodeTo ...
- SQL 增加列、修改列、删除列
SQL语句增加列.修改列.删除列 1.增加列: alter table tableName add columnName varchar(30) 2.1. 修改列类型: alter table tab ...
- ASP.NET MVC案例教程(三)
ASP.NET MVC案例教程(二) 让第一个页面跑起来 现在,我们来实现公告系统中的第一个页面——首页.它非常简单,只包括所有公告分类的列表,并且每个列表项是一个超链接.其中分类数据是用我们的Moc ...
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest GThe Problem to Slow Down You
http://blog.csdn.net/u013368721/article/details/42100363 回文树 建立两棵回文树,然后count处理一遍就可以了,然后顺着这两棵树的边走下去就 ...
- Cycle (KMP + hash)
题意:给你2个串,让你判断2个字符串的前缀是否满足首尾连接形成的环是不是一样的. 思路:我们需要提前知道的是满足条件的前缀一定满足 strA = str1 + str2, strB = str2 + ...
- linux C access
[1]作用 确定文件的访问权限 [2]头文件 #include <unistd.h> [3]函数定义 int access(const char * pathname, int mode ...
- demo1:会下蛋的机器人
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...