【发布时间】:2020-12-28 17:31:47
【问题描述】:
我的代码看起来像这样;
public ObservableCollection<ParamViewModel> ListOfPhrases{
get => _listOfPhrases;
set => SetProperty(ref _listOfPhrases, value);
}
public class ParamViewModel : ObservableObject
{
bool _selected;
int _id;
string _name;
string _state;
public bool Selected { get => _selected; set => SetProperty(ref _selected, value); }
public int Id { get => _id; set => SetProperty(ref _id, value); }
public string Name { get => _name; set => SetProperty(ref _name, value); }
public string State { get => _state; set => SetProperty(ref _state, value); }
}
private void OnPhraseTapped(string btnText)
{
ListOfPhrases.ForEach(x => x.Selected = false);
var first = ListOfPhrases.FirstOrDefault(x => x.Name == btnText);
if (first != null) first.Selected = true;
所以当 btnText 是 ABC 时,它首先填充 ListOfPhrases 列表中的一个元素。然后将first的值设置为true。
我的问题是。为什么更改 First 的 Selected 值会更改 ListOfPhrases 中的条目?
If I create this code:
var a = "ABC";
var b = a;
b = "x"
那么我相信更改b 不会更改a 的值
【问题讨论】:
-
请提供
List<Phrase>或ListOfPhrases所涉及的类型的详细信息。 -
正如 Wyck 所暗示的,
Phrase可能是一个引用类型。你对 C# 中的引用了解了多少? -
ListOfPhrases几乎肯定包含引用类型对象。基本上所有“指向”实例的变量都将指向同一事物。然而,字符串是不可变的。 -
所以你的意思是
first仍然是列表的一部分,如果我用 = 获得对它的引用,那么我可以更改它并且列表中的值也会改变? -
重新定义变量(
=)和修改成员(.Selected =)是有区别的。
标签: c#