【发布时间】:2017-03-20 15:32:04
【问题描述】:
由于我不知道适用于此的术语,我不确定在此搜索现有的 cmets。
我最近在一个类似于以下的表达式主体上浪费了大量时间:
public SomeListViewModel SearchSomeModel => new ShowSomeViewModel{...};
当我尝试设置以下值时:
SearchSomeModel.Property = 12345;
它表现得好像一切都很好。但实际值从未改变。当我改为插入 {get;} 时:
public SomeListViewModel SearchSomeModel {get;} = new ShowSomeViewModel{...};
它工作正常。
有趣的是,如果这开始是一个普通的 get(使用 get {return ..} 然后 ReSharper(?) 提供将其转换为第一个版本。
无论如何,我想了解两者之间的区别(不,不是在 CLR 级别),但只是为了 a) 知道如何以适当的术语来指代每一个,b) 为什么一个有效而另一个只是假装工作。
谢谢!
【问题讨论】:
-
简单的TryRoslyn 显示了不同...
-
如果我没记错的话,表达式主体总是会再次计算值(即,每次您从 SearchSomeModel 读取值时,它都会调用您在其中编写的构造函数调用),而您的第二个示例只是初始化一个具有一个值的属性,然后将其存储并可以修改。
-
搜索您的问题的确切标题会导致(很多)页面解释您的问题的答案,所以很明显您确实知道此问题的合适搜索词.
-
@Servy 是这样吗?如果是这样,那么这是一个骗局,不是吗?
-
@Fildor 最重要的结果主要是语言文档(希望如此)。
标签: c# properties expression