Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用关键字会导致对象超出范围_C#_.net_Memory Leaks_Idisposable - Fatal编程技术网

C# 使用关键字会导致对象超出范围

C# 使用关键字会导致对象超出范围,c#,.net,memory-leaks,idisposable,C#,.net,Memory Leaks,Idisposable,为什么在if语句中使用对象ok时超出范围?我如何处理对象ok public class hello : IDisposable { } public class hi{ private void b() { using(hello ok = new hello()); hello no = new hello(); if( ok == no ) { ok = no;

为什么在if语句中使用对象
ok
时超出范围?我如何处理对象
ok

public class hello : IDisposable { 

}

public class hi{

    private void b() 
    {
        using(hello ok = new hello());

        hello no = new hello();

        if( ok == no )
        {
            ok = no;
        }
    }
}

您没有正确使用
using
语句,您需要的是:

using(hello ok = new hello())
{
    hello no = new hello();

    if( ok == no )//Point 1
    {
        ok = no;//Point 2
    }
}//Point 3
一些要点(见上述评论):

  • 这永远不会是真的,因为您有两个不同的实例。除非,否则该类已重写相等运算符

  • 这无效且不会编译,您不能使用语句重新分配
    中使用的变量

  • 这里
    ok
    将超出范围,它也将在此时被处理,假设它实现了IDisposable-我认为如果它不实现IDisposable,它将不会编译


  • 总的来说,您似乎试图做的事情没有多大意义。

    objectOK将在这里读取
    使用
    作用域后处理,但您需要在{}中的using语句之后放上
    {
    括号来定义作用域并实现IDisposableEncase。例如-using(var a=new b()){if(a==1)a=2;};您的使用块需要包装在{…}