首页 > 解决方案 > 当我为该条目设置变量并更改变量时,为什么列表中的条目会更改?

问题描述

我的代码看起来像这样;

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

标签: c#

解决方案


参考。

长话短说; 对象由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# 中理解的一个非常重要的概念。

要理解这一点,我强烈建议您阅读以下内容:

https://jonskeet.uk/csharp/references.html


推荐阅读