标题可能不正确,如果有,请更改。我不确定如何提出我的问题,所以只需查看代码,因为它应该是显而易见的。
使用注释代码可以工作,但我想知道为什么实际代码不起作用。我确定这是错的,但如何解决呢?或者这不是它的完成方式吗?
using System;
namespace SomethingAwful.TestCases.Structs
{
public class Program
{
public static void Main()
{
Foo f = new Foo();
f.Bar.Baz = 1;
Console.WriteLine(f.Bar.Baz);
}
}
public class Foo
{
public struct FooBar
{
private int baz;
public int Baz
{
get
{
return baz;
}
set
{
baz = value;
}
}
public FooBar(int baz)
{
this.baz = baz;
}
}
private FooBar bar;
public FooBar Bar
{
get
{
return bar;
}
set
{
bar = value;
}
}
//public FooBar Bar;
public Foo()
{
this.bar = new FooBar();
//this.Bar = new FooBar();
}
}
}
答案 0 :(得分:9)
结构只能按值复制,所以最后你要做的就是更改返回的副本。使用课程。
答案 1 :(得分:5)
使用
Foo.FooBar myFooBar = new Foo.FooBar { Baz = 1 };
f.Bar = myFooBar;
就像Steven所说,你需要创建一个struct的实例,并将属性设置为它。否则它按值传递。
答案 2 :(得分:1)
此外,您可以将结构视为“已分配”,因此您不需要太新()它。而不是
this.Bar = new FooBar();
只做
this.Bar.Baz = 1;