C#for和foreach的区别-----dictionary遍历的方式

一、遍历方式

dictionary遍历的方式有两种:一种是通过foreach,一种是通过for来实现遍历。

Dictionary<string,string> list=new Dictionary<string,string>;
foreach(var item in list)
{
   Console.WriteLine(item.Key+item.Value);
}
//KeyValuePair<T,K>
foreach(KeyValuePair<string,string> kv in list)
{
   Console.WriteLine(kv.Key+kv.Value);
}
//通过键的集合取
foreach(string key in list.Keys)
{
   Console.WriteLine(key+list[key]);
}
//for循环遍历
List<string> test=new List<string>(list.Keys);
for(int i=0;i<list.Count;i++)
{
   Console.WriteLine(test[i]+list[test[i]]);
}
 

二、注意事项:

     对于基本类型的集合,foreach可以任意修改集合中元素。对于引用类型的集合(如studentEntity),不能进行元素的添加或删除等改变引用的操作。否则会报错:Collection Was modified;enumeration Operation may not execute,当用foreach遍历Collection时,如果Collection有Add或者Remove操作或者给item某个属性赋值都会有这个错误。但可以改变元素(对象)的属性(如改变studentEntity的name属性为张三)。

三、移除元素

     上文已经提到了移除dictionary(Collection)中的元素,不能使用foreach,只能使用for来实现。

for(int i=0;i<list.count;i++)
{
     if(list[i])
    {
        list.RemoveAt(i);
    }
}
     如果这样循环,肯定不对,{A  B  C  D  E  F  G  H}假设当前遍历到D(i=3),移除,接着遍历i=4(F),此时跳过了E。

     我们使用倒序遍历,这个问题就能迎刃而解啦。

for(int i=list.Count-1;i>=0;i--)
{
     if(list[i])
    {
        list.RemoveAt(i);
    }
}

           项目中用到的真实代码:

  public static OperationResult CheckAddOrUpdateMetaFields(ObjectData objectData)
    {
       OperationResult result = new OperationResult();
       result.Code = 200;
       Dictionary<string, Data> dictionaryFields = objectData.MetaFields;  //任务所有的字段
       List<string> allowedList = TaskManageConst.GetAllowedMetaFieldsList();
       for (int i = 0; i < dictionaryFields.Count; i++)
         {
          if (!allowedList.Contains(dictionaryFields.ElementAt(i).Key))//key不在allowedList,移除
            {
              dictionaryFields.Remove(dictionaryFields.ElementAt(i).Key);
              i--;
             }
         }
          return result;
    }




             

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值