为什么在清理代码中将 null 转换为变量?
Why cast null into variables in cleanup code?
在查看 C# 中某些库的代码时(使用 Resharper 反编译),我有时会遇到如下所示的清理代码:
public class Something
{
private SomeObject _someObject;
...
public void Dispose()
{
_someObject = (SomeObject) null;
}
}
将 null
强制转换为此处要清除的字段类型有什么好处?
反编译器无法区分不带转换和带转换的 null
赋值,因为它们执行相同的操作并编译为相同的 IL。由于 null
有时确实需要转换,例如调用重载方法时,为简单起见,某些反编译器可能始终包含强制转换。
这里没有任何好处,我强烈怀疑原始代码没有包含转换。
在查看 C# 中某些库的代码时(使用 Resharper 反编译),我有时会遇到如下所示的清理代码:
public class Something
{
private SomeObject _someObject;
...
public void Dispose()
{
_someObject = (SomeObject) null;
}
}
将 null
强制转换为此处要清除的字段类型有什么好处?
反编译器无法区分不带转换和带转换的 null
赋值,因为它们执行相同的操作并编译为相同的 IL。由于 null
有时确实需要转换,例如调用重载方法时,为简单起见,某些反编译器可能始终包含强制转换。
这里没有任何好处,我强烈怀疑原始代码没有包含转换。