-4

有什么区别:

诠释 c; 诠释 c=新诠释();

有时我使用第一个并且效果很好,但有时当我在循环中使用时它不起作用。

这项工作:

    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

4 回答 4

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))框架使用wherevariableType是被分配变量的类型自动分配类变量

于 2013-11-11T12:40:24.470 回答
3

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

在给它赋值之前你不能读取一个局部变量,所以下面的代码不会编译:

int c;
int a = c;

而以下将:

int c = new int();
int a = c;
于 2013-11-11T12:38:56.270 回答
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;
于 2013-11-11T12:39:19.117 回答
0

我认为当您在循环中使用它时,它将为您提供整个数组中的最后一个元素,因此您可以在循环外声明它

于 2013-11-11T12:58:41.963 回答