c# - 当我为该条目设置变量并更改变量时,为什么列表中的条目会更改?
问题描述
我的代码看起来像这样;
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
解决方案
参考。
长话短说; 对象由REFERENCE分配。而值类型是自包含在它们自己的内存空间中的。
例子:
// assume the constructor argument assigns to the public property Value
var listOfObjects = new List<SomeObject>() {
new SomeObject(1),
new SomeObject(2)
}
var a = listOfObjects[0];
var a.Value = 3;
// will print out 3 instead of 1
Console.WriteLine(listOfObjects[0].Value);
你会想读一些关于这个的。这是在面向对象编程和 C# 中理解的一个非常重要的概念。
要理解这一点,我强烈建议您阅读以下内容:
推荐阅读
- r - 无法在使用闪亮创建的选项卡中生成选定的数据详细信息
- android - android 应用程序仅在充电时通过互联网发送数据
- r - 基于GPX文件中的坐标自动检测坐标参考系?
- c - C中函数的定义
- php - 将谷歌日历 API 与 laravel 链接以创建日历和事件
- python - 我如何从 python 中的字符串中读取定义的值,就像我可以在 C 中使用 scanf 一样
- typescript - 如何使用 TypeScript for VSCode 键入 JSON 文件?
- html - 将类添加到标题时背景图像消失
- mysql - 如何将mysql数据从hdfs加载到pyspark
- python - Pip install 在子包中构建轮子失败?