为什么没有List.Add()触发属性的Setter?

时间:2017-03-03 08:21:13

标签: c# list properties set setter

我有一个名为gridExtra的{​​{1}}类型的属性。 我使用MVVMlight,因此我在setter中使用了List<String>

SuggestionFirstName

如果我这样做

Set()

为什么第二条指令不会触发属性的 public ObservableCollection<string> SuggestionFirstName { get { return _suggestionsFirstName; } set { Set(ref _suggestionsFirstName, value); } } 方法?

2 个答案:

答案 0 :(得分:1)

SuggestionLastName是某个对象的属性,它在此行中设置:

SuggestionLastName = new List<String>();

请参阅,它会创建一个新列表,然后设置该属性以记住该列表。

然后,这一行:

SuggestionLastName.Add("hello");

执行相反的操作:读取该属性以保留该列表,然后将该项直接添加到刚刚从属性中读取的相同列表 。没有&#34;设置属性&#34;发生。读取属性,然后列表内容正在更改。列表没有改变。

答案 1 :(得分:0)

它不会触发,因为您没有为属性 SuggestionLastName设置任何内容 实际发生的是您从属性(列表)获取值,然后向其中添加项目:

var list = SuggestionLastName; // getter triggered
lits.Add("hello");

看,没有设置任何东西:)