首页 新闻 搜索 专区 学院

List的remove问题

0
悬赏园豆:5 [已解决问题] 解决于 2010-05-03 22:22
代码
List<SY_User> userList = UserService.GetUser(p => p.IsStaff == true);
for (int i = 0; i < userCodeList.Count; i++)
{
string userCode = userCodeList[i];
SY_User user
= UserService.GetUser(userCode);
userList.Remove(user);

}
 

 

  从list列表中用remove方法删除对象T,但是不能删除,返回值是false;

 

上面的方法不能从userList中将指userCode所对应的的SY_User对象删除,返回值都是false,不知道是什么原因。。。

问题补充: 一开始用的是foreach循环操作,网上google了一下,foreach本来就是对userList自身进行枚举,删除会导致枚举出错。而且msdn上面的说法就是:“此方法使用用于 T(列表中的值的类型)的默认相等比较器 EqualityComparer.Default 来确定相等性”。但是前提是我根据userCode所得到的SY_User与userList中SY_User一样,也即是同一个对象。所以出错的原因就不知道具体处在哪里,。。。
coodoing的主页 coodoing | 初学一级 | 园豆:185
提问于:2010-04-26 22:34
< >
分享
最佳答案
0

在 foreach 循环里面是不能做remove 操作的,你需要先用一个临时的结构吧要删除的内容记录下来,然后在 foreach 外面进行删除。

收获园豆:10
eaglet | 专家六级 |园豆:17139 | 2010-04-27 08:46
foreach (string userCode in userCodeList) { userList.Remove(userCode); } 这个可以实现,但是就是不能实现对SY_User对象的移除。。。
coodoing | 园豆:185 (初学一级) | 2010-04-27 08:57
@DCBI: SY_User 这个类要重载 Equal 和 GetHashcode 这两个函数才行,否则移除时无法通过输入的 userCode 对应到 List中的userCode
eaglet | 园豆:17139 (专家六级) | 2010-04-27 12:20
其他回答(1)
1

看代码是很忽悠的

哪来的冒出来的userCodeList

一开始看还以为是对数组的删除,一看,发现变量名是不同的。

既然不同,只能用程序上来解释:

userList里存放的对象的引用,应该不是你新查询到的user这个对象的引用。

路过秋天 | 园豆:4773 (老鸟四级) | 2010-04-27 11:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册