初学,对于赋值问题不知道如何处理,望大家指教。int s =0for(int i=0;i<5;i++)
{
int tmpS=0;
dt = GetDataTable(xx)
for (int x=0;x<dt.Rows.Count;x++)
{
   tmpS=int.Parse(dt.Rows[i][0].toString());
}

if (s==0)
{
  s=tmpS;
}else if(...)
{
  ...
}
}如上for循环,s和tmpS指向一样,每次循环都被初始化为0,所以下面的if语句一直都是true.不知道有没有人帮忙看一下如何解决。。

解决方案 »

  1.   

    还没看完,tmpS=int.Parse(dt.Rows[i][0].toString());这执行了吗?有值?
      

  2.   

    初学,对于赋值问题不知道如何处理,望大家指教。int s =0
    int tmpS=0;for(int i=0;i<5;i++)
    {
    dt = GetDataTable(xx) 
    for (int x=0;x<dt.Rows.Count;x++)
    {
    tmpS=int.Parse(dt.Rows[i][0].toString());
    }if (s==0)
    {
    s=tmpS;
    }else if(...)
    {
    ...
    }
    }
      

  3.   

    for (int x=0;x<dt.Rows.Count;x++)
     {
     tmpS=int.Parse(dt.Rows[i][0].toString());
     }
     tmps=dt行中的最后一个值。你循环没意义了。是否是tmps+=?
      

  4.   

    int 不是引用类型 所以不存在S和TMPS指向问题
    在你的循环中的最后一次循环int.Parse(dt.Rows[i][0].toString());
    最后一条是0 TMPS是0另外 如果S不等于0后
    if (s==0)
    {
    s=tmpS;
    }else if(...)
    {
    ...
    }
    会走else if 
    S的值不会根据TMPS改变 同样也不会有你所说的初始化问题
      

  5.   


    如果我在外面定义tmpS ,这个值就会一直累加上来,我想在每个for(int i=0;i<5;i++) 之间重新设置为0.
      

  6.   


    老兄说的没错,另外我想知道一下DataTable之间的赋值是否相互影响如。int s =0;
    DataTable dt = new DataTable();for(int i=0;i<5;i++)
    {
    int tmpS=0;
    DataTable tmpDt = GetDataTable(xx);
    for (int x=0;x<dt.Rows.Count;x++)
    {
       tmpS +=int.Parse(dt.Rows[i][0].toString());
    }

    if (s==0)
    {
      s=tmpS;
      dt=tmpDt;
    }else if(...)
    {
      ...;
    }
    }
      

  7.   

    DataTable是引用类型,0举个例子举个例子dataset ds=数据清空dataset:ds.Clear();datatable dt1=ds.tables[0];//界面1赋值   datatable dt2=ds.tables[0];//界面2赋值//修改了dt2 --> dt1也变化 ds.tables[0]也会变化,变化成dt2修改后的数据集
      

  8.   

    如何解决tmpDt的引用问题呢?
    int s =0;
    DataTable dt = new DataTable();for(int i=0;i<5;i++)
    {
    int tmpS=0;
    DataTable tmpDt = GetDataTable(xx);
    for (int x=0;x<dt.Rows.Count;x++)
    {
       tmpS +=int.Parse(dt.Rows[i][0].toString());
    }

    if (s==0)
    {
      s=tmpS;
      dt=tmpDt;
    }else if(...)
    {
      ...;
    }
    }
      

  9.   

    用tmpDt.copy()可以吗?
    DataTable dt = new DataTable();
    for xxx
    {
      DataTable tmpDt = GetDataTable(xx);
    }
    if (tmpDt.rows.count>dt.rows.count)
     {
        dt = tmpDt.copy();
     }
      

  10.   

    DataTable.Copy 方法
    返回值
    类型:System.Data..::.DataTable
    新的 DataTable,它具有与该 DataTable 相同的结构(表架构和约束)和数据。
    如果这些类已经过派生,则副本也具有相同的派生类。
    Copy 和 Clone 方法创建的新 DataTable 都与原始 DataTable 具有相同的结构。 Copy 方法创建的新 DataTable 与原始表具有相同的 DataRows 集,但 Clone 方法创建的新 DataTable 不包含任何 DataRows。
    MSDN看一下http://msdn.microsoft.com/zh-cn/system.data.datatable.copy(v=vs.80)另外,复制datatable结构,复制datatable结构和数据,筛选Datatable数据
    也可以用datatable.Clone()
      

  11.   

    int s =0;
    int tmpS=0;for(int i=0;i<5;i++)

     dt = GetDataTable(xx) 
    for (int x=0;x<dt.Rows.Count;x++)
     {
     tmpS=int.Parse(dt.Rows[i][0].toString());
     }
     
    if (s==0)
     {
     s=tmpS;
     }else if(...)
     {
     ...
     }
    }
      

  12.   

    其实我一直没看明白的是这句:
    for (int x=0;x<dt.Rows.Count;x++)
    {
        tmpS +=int.Parse(dt.Rows[i][0].toString());
    }
    姑且不论到底是tmpS=还是tmpS+=,我就纳闷,你这个循环是要干什么?你循环的变量是x,然后在循环内部一直都没用这个变量x,按楼主的代码,其实不用循环,直接tmpS=int.Parse(dt.Rows[i][0].toString())*dt.Rows.Count就可以了。
    所以我怀疑是楼主代码写错了,应该写成:
    tmpS +=int.Parse(dt.Rows[x][0].toString());