更新类中的Struct属性

时间:2014-04-20 14:52:18

标签: c# struct value-type

我知道Struct是一个值类型而Class是引用类型,但是我似乎无法解决这个问题。

我有一个包含结构列表的类:

public class Basket
{
  string ID{get; set;}
  List<Fruit> fruits{get;set;}

  public struct Fruit
  {
      string Name{get;set;}
      bool IsFresh;
  }
}

将类实例传递给另一个类时,我想更新其中一个Structs&#39; IsFresh属性,但代码只是跳过它:

public class Customer
{
    public string Name{get;set;}
    public Basket Basket{get;set;}

    public Customer(string name, Basket basket)
    {
         this.Name = name;
         this.Basket = basket;
    }

    public ChangeBasket()
    {
        //CODE THAT IS NOT WORKING
        Basket.Fruits[0].IsFresh = false;
    }
}

正在修改相同的引用类,并且应该更新有价值的结构。

为什么不起作用?

4 个答案:

答案 0 :(得分:3)

通常不应该写可变结构。相反,分配一个全新的结构。见here。基本上发生的是你正在修改结构的副本,因为它是一个值类型。

答案 1 :(得分:2)

首先,访问修饰符存在一些问题(当您想要访问类\ structs之外的代码时使用public。)

您的问题是由于结构是值类型的原因,因此当您访问列表元素时,您将访问索引器的“getter”列表而不是列表本身返回的元素的副本。 这意味着如果您尝试更新实例,更新将不会真正影响“真实”实体的更改,而是影响复制的实体,这就是您收到编译错误的原因。

答案 2 :(得分:0)

basket.Fruits[0].IsFresh = false;

应该是:

Basket.fruits[0].IsFresh = false;

这样可以解决吗?

答案 3 :(得分:-1)

当列表是结构列表时,似乎您无法使用索引器。 以下代码有效:

var x = Basket.Fruits [0];

x.IsFresh = false;