我已经确定了以下难以理解的行为。将属性从实例外部设置为空
我假定您可以将对象A的属性设置为对象B,操作对象B并且将对对象A的属性进行更改(因为它是相同的对象)。我期待这个单元测试通过,但是在将B设置为null时,它在最后一行失败。为什么?
[TestMethod]
public void TestObject()
{
Child child = new Child();
var parent = new Parent(child);
child.Name = "John";
Assert.AreEqual(parent.Child.Name, "John");
child = null;
Assert.IsNull(parent.Child);
}
public class Child
{
public string Name { get; set; }
}
public class Parent
{
public Child Child { get; set; }
public Parent(Child kid)
{
Child = kid;
}
}
“崩溃”并没有真正告诉我们任何事情。异常更有用。 – 2015-04-03 13:29:55
将'child'设置为null只是设置局部变量'child'。 'parent.Child'仍然指向构造'parent'时分配给'child'的实例。 – 2015-04-03 13:31:13
的确儿童被设置为空而不是parent.child。如果你将parent.child设置为null,它将按照你的意图工作。 – 2015-04-03 13:34:07