. 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引用永远不会指向消失的对象;这就是GC的全部意义。您的示例描述了对单个对象的两个独立但相同的引用。更改一个引用不会更改任何其他引用。基本上你的描述是这样的:
int x = 1;
obj.Foo = x;
x = 0;
然后期待obj。Foo等于0。它不会是,它会是1,除非你改变它。引用的工作原理相同。
您没有"垃圾"B
的实例。那个实例还是很幸福的。你只是删除了对它的一个引用。
换句话说:在我的Facebook上,我把"Donna"列为我的妻子。如果我现在清除该字段(我不打算这样做),我就没有删除她的帐户。
如果A.F == null
为False
, A.F
为B
,则A.F
和B
引用的是同一个对象,该对象不为空。如果您认为B
在您的代码中此时应该为null,因为您之前将其设置为null,那么您的代码中可能存在另一个错误。