我无法理解这段小代码的C#语义。
using System;
namespace Test
{
struct Item
{
public int Value { get; set; }
public Item(int value)
{
Value = value;
}
public void Increment()
{
Value++;
}
}
class Bag
{
public Item Item { get; set; }
public Bag()
{
Item = new Item(0);
}
public void Increment()
{
Item.Increment();
}
}
class Program
{
static void Main(string[] args)
{
Bag bag = new Bag();
bag.Increment();
Console.WriteLine(bag.Item.Value);
Console.ReadKey();
}
}
}
只需阅读我希望在我的控制台中读取1作为输出的代码。
不幸的是我不明白为什么控制台打印0。
要解决问题我可以
将Item
声明为class
而不是struct
将public Item Item { get; set; }
转换为public Item Item;
您能解释一下为什么会出现这种情况以及上述“解决方案”解决问题的原因吗?
答案 0 :(得分:2)
你不应该使用可变结构,他们可能会有奇怪的行为。更改结构值没有任何好处,因为您可以立即更改它们的副本。结构是值类型,这就是为什么您的代码没有按预期工作的原因,因为您已经设置了属性并且每次都有当你改变它时你实际上改变复制而不是原始值(结构不是引用类型)。
潜在的解决方案:
答案 1 :(得分:0)