C# 更新类内的结构属性

C# 更新类内的结构属性,c#,struct,value-type,C#,Struct,Value Type,我知道结构是值类型,类是引用类型,但我似乎无法回避这个问题 我有一个类,它有一个结构列表: public class Basket { string ID{get; set;} List<Fruit> fruits{get;set;} public struct Fruit { string Name{get;set;} bool IsFresh; } } 正在修改同一引用类,并且应更新值结构 为什么不起作用?这个篮子。水果[0]。Is

我知道结构是值类型,类是引用类型,但我似乎无法回避这个问题

我有一个类,它有一个结构列表:

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

  public struct Fruit
  {
      string Name{get;set;}
      bool IsFresh;
  }
}
正在修改同一引用类,并且应更新值结构


为什么不起作用?

这个
篮子。水果[0]。IsFresh=false

应该是:

Basket.fruits[0].IsFresh = false;

这能解决问题吗?

这个
篮子。水果[0]。IsFresh=false

应该是:

Basket.fruits[0].IsFresh = false;

这能解决问题吗?

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

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

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

var x=篮子水果[0]


x、 IsFresh=false

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

var x=篮子水果[0]


x、 IsFresh=false

首先,访问修饰符有一些问题(如果要在类\结构之外访问代码,请使用public)

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

首先,您在访问修饰符方面遇到了一些问题(当您想在类\结构之外访问代码时,请使用public)

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

您的属性是“Basket”,而不是“Basket”。这能解决问题吗?你不能这么做。将
水果
改为类。您的属性是“篮子”,而不是“篮子”。这能解决问题吗?你不能这么做。将
four
改为上课。不,这可能是一个输入错误,但不是最终问题:(不,我只是为了这个问题快速编写了此代码。问题仍然是一个问题不,这可能是一个输入错误,但不是最终问题:(不,我只是为了这个问题快速编写了这段代码。这个问题仍然是个问题,我不同意。事实上,我的解决方案不是你想要的。因为它是一个值类型,你会被更新为一个全新的对象,而不是原来的对象。奇怪的是,你没有得到编译错误(根据你原来的帖子)。尝试清理和重建我不同意。事实上,我的解决方案不是你想要的。因为它是一种值类型,你会被更新为一个全新的对象,而不是原来的对象。奇怪的是,你没有收到编译错误(根据你原来的帖子)。尝试清理和重建根据街上的单词(意思是网络)你似乎有道理。根据街上的这个词(意思是网络),你似乎有道理。