日期:2014-05-20  浏览次数:20997 次

一个简单的问题,关于foreach
我把问题简化了,问题模型如下

C# code

    List<int> lst=new List<int>();
    lst.Add(1);
    lst.Add(3);
    lst.Add(5);
    lst.Add(7);
    //希望执行以下修改:如果整数大于3,则将整数增加10,否则保持不变。
    lst.ForEach(c=>c=c>3?c+10);
    //得到的结果期望是lst的元素值:1,3,15,17    



这里的元素只是一个整数类型,实际应用中元素是一个实体类型。

------解决方案--------------------
list.Where(c => c > 3).ToList().ForEach(delegate(int i) { Console.WriteLine(i + 10); });



ForEach对 List 的每个元素执行指定操作,但并不能改变元素。

你要么就用for去改变元素
------解决方案--------------------
foreach 的元素是只读的。
------解决方案--------------------
貌似是因为是值类型的原因,如果是引用类型就可以
------解决方案--------------------
探讨
foreach 的元素是只读的。

------解决方案--------------------
C# code
    List<int> lst = new List<int>();
            lst.Add(1);
            lst.Add(3);
            lst.Add(5);
            lst.Add(7);
            //希望执行以下修改:如果整数大于3,则将整数增加10,否则保持不变。
            //lst.ForEach(c=>c=c>3?c+10);
            //得到的结果期望是lst的元素值:1,3,15,17 

            List<int> lstTemp = new List<int>();

            lst.ForEach(delegate(int argInt)
            {
                if (argInt > 3)
                    lstTemp.Add(10 + argInt);
                else
                    lstTemp.Add(argInt);
                
            });