. net中,如何确定字段是否已被空

本文关键字:是否 字段 何确定 net | 更新日期: 2023-09-27 17:50:41

我相信这很简单。我试着找过了,但是一无所获。

假设我有一个类型为A的对象,它有一个类型为B的公共字段F。我创建了B的实例并设置了A.F=B

A.F == null的Result为False。A.F is B的结果为True.

但是B被设置为null。A.F属性仍然持有B旧实例的句柄。并且A.F的运行时查找仍然显示它为B类型。所以测试A.F == null的结果仍然是False,测试A.F is B的结果仍然是True。尽管B已经被销毁了

那么我如何检查A.F属性,看看它的句柄现在指向一个消失的对象?

. net中,如何确定字段是否已被空

.NET引用永远不会指向消失的对象;这就是GC的全部意义。您的示例描述了对单个对象的两个独立但相同的引用。更改一个引用不会更改任何其他引用。基本上你的描述是这样的:

 int x = 1;
 obj.Foo = x;
 x = 0;

然后期待obj。Foo等于0。它不会是,它会是1,除非你改变它。引用的工作原理相同。

您没有"垃圾"B的实例。那个实例还是很幸福的。你只是删除了对它的一个引用。

换句话说:在我的Facebook上,我把"Donna"列为我的妻子。如果我现在清除该字段(我不打算这样做),我就没有删除她的帐户。

如果A.F == nullFalse, A.FB,则A.FB引用的是同一个对象,该对象不为空。如果您认为B在您的代码中此时应该为null,因为您之前将其设置为null,那么您的代码中可能存在另一个错误。