有了結構,我不能直接改變它的字段,因爲整個結構都是值類型的。
當C#爲您製作struct
的副本時,您無法更改情況中的字段。在其他情況下,您可以修改struct
的字段。這裏是差的小規模示威:
struct Foo {
public int A {get;set;}
public void SetA(int a) {
A = a;
}
}
class Bar {
Foo f;
public Foo F {
get{return f;}
set {f = value;}
}
public void SetFooA(int x) {
f.SetA(x);
}
}
public static void Main() {
Bar b = new Bar();
b.F.SetA(123); // b.F makes a copy, so changing A fails
Console.WriteLine("{0}", b.F.A);
b.SetFooA(456); // Inside Bar, f.SetA is called directly, so the change works fine
Console.WriteLine("{0}", b.F.A);
b.F = new Foo { A = 112233 }; // This also works, because the whole F is assigned
Console.WriteLine("{0}", b.F.A);
}
如果我有一個公共領域int X
,我可以適當修改。
同樣的規則適用於用戶定義的struct
s,只要你修改它的全部。你不能修改int
的一部分,因爲它不是一個組合。當您一次分配整個struct
時,struct
的修改可以正常工作。換句話說,分配
b.F = new Foo { A = 112233 };
在我的例子
替換你的榜樣分配
B = 100;
。
Demo.
問題不是100%清楚。你能提供代碼示例,以便我們更好地理解? – peval27
是什麼讓你認爲所有的字段都是引用類型? – Servy