代码之家  ›  专栏  ›  技术社区  ›  Sejanus

如何:取消设置C中的变量?

c#
  •  22
  • Sejanus  · 技术社区  · 16 年前

    这真的很有趣,但我没能自己找到答案。如何取消设置变量?例如,php有unset($var)函数。

    9 回复  |  直到 6 年前
        1
  •  24
  •   danronmoon    6 年前

    实际上没有“未设置”的等价物。

    我知道最接近的匹配是 default 关键字。

    例如:

    MyType myvar = default(MyType);
    string a = default(string);
    

    变量仍将被“设置”,但它将具有其默认值。

        2
  •  25
  •   Jon Skeet    16 年前

    你不能。没有“取消”变量的概念。您可以将其设置为不同的值-0,空,任何合适的值。实例/静态变量甚至没有设置/取消设置变量的概念,局部变量只有“明确分配”或“未明确分配”。

    你想达到什么目的?

        3
  •  9
  •   John Saunders Tony    10 年前

    通常将其设置为空(对于类型为int的变量,您必须将其设置为可为空的版本int?).

    如果只想在较大的函数中短时间内使用该变量,可以对其进行范围调整,如下所示:

    {
        int i = 2;
    }
    

    变量将只持续到右大括号。

    如果这些不包括你的情况,那么你能详细说明你在哪里需要这样做吗?

        4
  •  5
  •   gimel    16 年前

    也许你想释放 对象 变量正在引用:

    MyVar = null;
    
        5
  •  3
  •   rslite    16 年前

    值类型变量不需要取消设置。它们是永久分配的。

    对于引用类型变量,只需将其设置为 无效的 垃圾收集器将销毁关联的对象(并释放内存)。但请注意,变量本身将继续存在于其整个范围内(代码块、方法、对象生命周期等)。

    如果您想使用它来释放内存,那么只需将所有不需要的对象设置为空,然后等待垃圾收集器完成它的工作。

    编辑 :正如注释中所指出的,我建议说垃圾收集器不会立即启动收集。当框架试图分配内存,但找不到足够的空闲空间时,通常会发生这种情况。可以“手动”启动垃圾收集,但这是不可取的,可能会恶化程序的行为。在大多数情况下,GC的默认行为应该足够了。

        6
  •  2
  •   Flexo - Save the data dump sunny moon    10 年前

    要取消设置环境变量,请使用相同的environment.setenvironmentvariable方法,但传递null或string.empty作为值 http://msdn.microsoft.com/en-us/library/96xafkes(v=vs.110).aspx

    如果值为空且存在由变量命名的环境变量,则删除该环境变量。

        7
  •  1
  •   Jon Skeet    16 年前

    对于对象,可以将其设置为空,最好将字符串设置为string.empty,或者可以将变量声明为可以为空,例如:

    int? i = null;
    
        8
  •  1
  •   Rick Minerich    16 年前

    您可以为该变量定义一个范围。当作用域退出时,将不再定义变量:

    System.Console.WriteLine("let's give this a try: ");
    {
        int j = 0;
        System.Console.WriteLine(j);
    }
    //Won't compile with the following line.
    //System.Console.WriteLine(j);
    
        9
  •  -1
  •   Paramiliar    15 年前

    就我个人而言,我只是走了

    变量=无

    这似乎释放了资源,尤其是在使用手机时!