Pao*_*sco 168 c# idisposable using
using在(可能)null对象上使用该语句是否安全?
请考虑以下示例:
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否保证Dispose只有在对象不为空时才会被调用,而且我不会得到一个NullReferenceException?
rek*_*o_t 162
是的,Dispose()仅在非null对象上调用:
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
Joã*_*elo 32
在调用之前using检查对象的扩展,所以是的,它是安全的.nullDispose
在你的情况下你会得到类似的东西:
IDisposable x = GetObject("invalid name");
try
{
// etc...
}
finally
{
if(x != null)
{
x.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 13
你应该没问题:
using ((IDisposable)null) { }
Run Code Online (Sandbox Code Playgroud)
这里没有例外.
附注:不要误以为这foreach和IEnumerable其中一个异常将被抛出.