我是否需要处置嵌套在例程中的变量?

时间:2019-07-07 09:20:40

标签: c#

我正在使用大约20个变量,它们是在void中创建的。所以我的问题是,我的空白将要完成后,我是否需要处置它们?还是gc会自动执行此操作? 我还应该在空标题或方括号内创建它们吗?

示例:

public static void MainGridControl(
       string txtComments = "",
       int InventoryItemID = 0,
       int Situation = 0,

       decimal InventoryRetailPrice = 0,
       decimal QuantityValue = 1,
       decimal ExtrasPrice = 0,
       decimal RealPrice = 0,
       decimal DiscountPrice = 0,


       string InventoryMainGroupItemCode = "",
       string MainGroupItemName = "",
       string InventoryMainGroupItemID = "",
       string InventoryName = "",
       string VatValue = "",
       string Code = "",
       string Extras = "",
       string ExtraItemsNames = "[]",
       string ExtrasComments = "",
       string Cultery = "",
       string InfoText = "",

       bool Weight = false,
       bool FreePrice = false

       )
    {

    }

示例2

public static void MainGridControl()
    {
          string txtComments = "";
       int InventoryItemID = 0;
       int Situation = 0;

       decimal InventoryRetailPrice = 0;
       decimal QuantityValue = 1;
       decimal ExtrasPrice = 0;
       decimal RealPrice = 0;
       decimal DiscountPrice = 0;


       string InventoryMainGroupItemCode = "";
       string MainGroupItemName = "";
       string InventoryMainGroupItemID = "";
       string InventoryName = "";
       string VatValue = "";
       string Code = "";
       string Extras = "",
       string ExtraItemsNames = "[]";
       string ExtrasComments = "";
       string Cultery = "";
       string InfoText = "";

       bool Weight = false;
       bool FreePrice = false;
    }

我所有的变量只是字符串,整数,小数和布尔值。 有什么更好的方法可以处理它们?

1 个答案:

答案 0 :(得分:0)

在这两种情况下,这些变量都将在方法执行终止时被销毁,因为它们的scope在方法级别。

更进一步,在两个示例中您将做不同的事情。在第一个中,您直接在方法的主体中创建变量,而在第二个中,您将其作为具有默认值的可选参数传递。

这意味着尽管这两种情况都将在方法末尾放置变量,但是您可以在第二种情况下传递其中一些变量的值。

对于您的情况,您正在使用原始类型,因此垃圾收集器销毁它们不会有任何问题。

但是,正如@Sweeper指出的那样,如果您发现自己处于使用实现IDisposable接口的对象的情况下,则必须先处理它们,然后再通过{{ 1}}方法。否则,您将销毁该对象,但可能会留下未处理的资源,这可能导致内存泄漏。