日期:2014-05-18  浏览次数:20857 次

foreach是什么执行流程呢?
我用两个foreach遍历一个数据表的行和列,将这个表的一列拆分成两列,放入一个新表,为什么执行的时候,提示新表的列已存在。但是看流程,只是增加了一次啊!请高手帮忙啊!

而且,我只在表中取出一列,没有夺取,怎么会执行两次呢?是有多行问题造成的吗?怎么解决呢?

C# code

 DataTable myNewTable = new DataTable();

                foreach (DataRow myDR in myDTC[0].Rows)
                {
                    DataRow myNewDR=myNewTable.NewRow();
                    
                    foreach (DataColumn myDC in myDTC[0].Columns)
                    {
                         String myValue = myDC.ColumnName.ToString().Trim();
                         String minValue,maxValue;
                         //
                         //对数量进行判断,并拆分为最大值和最小值(自定义类实现,这里没有问题)
                         //
                         if (myDR[myDC] != DBNull.Value && myDR[myDC].ToString() != "")
                         {
                             String test = myDR[myDC].ToString().Trim();
                             SpecialCharExist mySCE = new SpecialCharExist();
                             List<String> myCompositionList = new List<string>();
                             bool flagRC = mySCE.whetherRelationCharExist(test, out myCompositionList);
                             if (flagRC == true)
                             {
                                 string[] myCompositionResult = myCompositionList.ToArray();
                                 minValue = myCompositionResult[0];
                                 maxValue = myCompositionResult[1];
                             }
                             else
                             {

                                 minValue = test;
                                 maxValue = test;
                             }
                         }
                         else
                         {
                             minValue = "0";
                             maxValue = "0";
                         }
                        //
                        //对新表增加列并进行赋值,赋给其最小值与最大值,问题可能出现在这里,但是我找不到啦!
                        //                        
                         DataColumn myNewDC1 = myNewTable.Columns.Add(myValue + "minValue".ToString(), typeof(double));
                         myNewDR[myValue + "minValue"] = Convert.ToDouble(minValue);
                         DataColumn myNewDC2 = myNewTable.Columns.Add(myValue + "maxValue".ToString(), typeof(double));
                         myNewDR[myValue + "maxValue"] = Convert.ToDouble(maxValue);


                        /*
                        myNewTable.Columns.Add(myValue+"minValue",typeof(double));

                        myNewTable.Columns.Add(myValue+"maxValue",typeof(double));

                        myNewDR[myElement + "minValue"] = Convert.ToDouble(minValue);
                        myNewDR[myElement + "maxValue"] = Convert.ToDouble(maxValue);
                        */
                    }

                    myNewTable.Rows.Add(myNewDR);
                    MessageBox.Show(myNewTable.Rows[0][0].ToString());
                }




------解决方案--------------------
foreach 是循环。。。
把增加列的语句拿出foreach
------解决方案--------------------
这个循环foreach (DataColumn myDC in myDTC[0].Columns)
里面有
DataColumn myNewDC1 = myNewTable.Columns.Add(myValue + "minValue".ToString(),
就不对。
你反复添加列了。
------解决方案--------------------
用字典吧 不懂。。。
------解决方案--------------------
foreach就是一条一条遍历啊 类似for循环,只是不像for循环那样可以看到变量的变化