首页 新闻 会员 周边 捐助

为什么AjaxPro的AjaxMethod中不能使用foreach(){}遍历并移除Hasttabl

0
悬赏园豆:50 [已解决问题] 解决于 2010-12-24 13:40

用代码说话吧.

 

[AjaxPro.AjaxMethod]
public int AskSubmit(int userID,int cityID,string contents)
{
m_Ask model
= new m_Ask(); //实体

Hashtable ht
= new Hashtable(); //假设 新建一个哈希表

ht.Add(
"ffffffffffffffffffff.[admin].f.sdgegew. adsdf. geg.s .sg",model);
ht.Add(
"fffffffff4r3tfffffffffff.[admin].f.sdgegew. adsdf. geg.s .sg", model);
ht.Add(
"ffffffffffffetgrffffffff.[adm32in].f.sdgegew. adsdf. geg.s .sg", model);
//胡乱添加一些内容

foreach (DictionaryEntry de in ht) //上面添加了3个哈希表值,这里遍历
{
if (de.Key.ToString().IndexOf(".[admin].") > 0) //查找包含关键字的哈希表键
{
lock (ht.SyncRoot)
{
ht.Remove(de.Key.ToString());
//找到就移除它.
}
}

}

int htCount = ht.Count; //页面调用ajaxpro的此方法后,程序走不到这里,除非上面遍历没找到,才能走到这里

//请问,为什么遍历到哈希键并移除后,程序就自动退出了? 无法继续执行下面的代码呢? 也没任何错误.

//下面还有很多代码省略...

return 1;
}

 

 

 

Richwong的主页 Richwong | 初学一级 | 园豆:120
提问于:2010-12-21 02:58
< >
分享
最佳答案
0

据我的不完全认知:foreach 一般只用在只读遍历,如果需要在遍历中做出修改删除操作,请使用for,在不能用for的情况下,可以先遍历时只记录索引,等foreach完之后再根据索引删除。

收获园豆:40
路过秋天 | 老鸟四级 |园豆:4787 | 2010-12-21 09:22
但是, 如果不是用于ajaxpro的调用,是可以继续执行的,在foreach内也可以正常删除的呀....... 也就是这个AskSubmit的方法,在后台代码调用,就能走到最后返回1.
Richwong | 园豆:120 (初学一级) | 2010-12-21 13:52
其他回答(2)
0

楼上正解。怎么可以在foreach里去修改呢?

收获园豆:5
码尔代夫iimax | 园豆:3138 (老鸟四级) | 2010-12-21 09:48
可我不明白, 后台c#中是可以在foreach中删除Hashtable的
支持(0) 反对(0) Richwong | 园豆:120 (初学一级) | 2010-12-21 14:44
0

修改一般都是用for的哦,foreach一般都是只读的哦!!!

收获园豆:5
@欣儿 | 园豆:210 (菜鸟二级) | 2010-12-21 09:58
Hashtable不能直接for哦 ... 我采用路过秋天的办法,解决了.只是担心性能
支持(0) 反对(0) Richwong | 园豆:120 (初学一级) | 2010-12-21 14:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册