声明变量(int c;和int c = new int()之间的差异;

时间:2013-11-11 12:33:45

标签: c#

有什么区别:

int c; int c = new int();

有时我使用第一个并且它完美地工作,但有时当我在循环中使用它时它不起作用。

这项工作:

    public int[] junta(Table ent,int j)
    {
         int[] matriz=new int[count(ent)];
         int k;
         k = 0;
         for (int i = fline(ent); i <= count(ent) + 1; i++)
         {
             if (Convert.ToString(ent.Cells[j, 3].Value) == Convert.ToString(ent.Cells[i, 3].Value))
             {

                 matriz[k]=Convert.ToInt32(ent.Cells[i,0].Value);
                 k++;

             }

         }
   }

这不起作用:

public int[] junta(Table ent,int j)
{
     int[] matriz;
     int k;
     k = 0;
     for (int i = fline(ent); i <= count(ent) + 1; i++)
     {
          if (Convert.ToString(ent.Cells[j, 3].Value) == Convert.ToString(ent.Cells[i, 3].Value))
          {

               matriz[k]=Convert.ToInt32(ent.Cells[i,0].Value);
               k++;

           }

      }
}

4 个答案:

答案 0 :(得分:6)

如果您将int c声明为字段(类变量),框架会将其指定为零

如果在方法中声明int c,则在分配之前不能使用它,因此这不起作用

public void TEST()
  {
     int c;
     int a= c*2;
  }

要使其正常工作,您必须在使用前指定它。它不必与声明的那一行在同一行。这非常好:

public void TEST(bool b)
  {
     int c;
     if(b)
       c = 2;
     else
       c = 4;
     int a= c*2;
  }

当它用作字段时,它是自动分配的,所以这没关系

class TestClass
{
  int c;
  public void TEST()
  {
     int x = c*2; // c has the value of zero.
  }
}

修改

框架使用default(typeof(variableType))自动分配类变量,其中variableType是要分配的变量的类型

答案 1 :(得分:3)

int c声明类型为int的变量。 int c = new int()声明类型为int的变量,并为其赋值(0)。

在为其赋值之前,您无法读取局部变量,因此以下内容将无法编译:

int c;
int a = c;

以下内容:

int c = new int();
int a = c;

答案 2 :(得分:3)

主要区别在于:

int c;

没有为变量赋值,所以如果你之后尝试访问变量,编译器会抱怨:

  

使用未分配的局部变量'c'

但是如果你这样做:

int c = new int();

然后你不妨写下这个:

int c = 0;

这将为其分配一个值。

您可以测试以下两个代码段并观察它们之间的区别:

int c;
int a = c;

用这个:

int c = 0; // try = new int(); as well if you want to
int a = c;

答案 3 :(得分:0)

我认为当你在循环中使用它时,它将为你提供整个数组中的las t元素,所以你可以在循环之外声明它