IList使用问题

TheRule 2008-04-07 03:51:12
我定义了类:
public class User
{
private string loginName;
public string LoginName
{
get { return loginName; }
set { loginName = value; }
}
private string password;
public string PassWord
{
get { return password; }
set { password = value; }
}
private string userName;
public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
}
然后在另一个类中定义了方法:
public IList<User> GetAllUsers()、public IList<User> GetOnlineUsers(),public User GetUser(string loginname),这个三个方法都从数据库中获取原始数据,然后转成相应的对象,当我:
IList<User> AllUsers=GetAllUsers();//返回所有
User u=GetUser("aaaa");//返回一个
bool isin=AllUsers.Contains(u);
AllUsers、u都不是空值,且AllUsers中确实包含u,但是isin却为false;
另外我:
IList<User> onLineUsers=GetOnlineUsers();
AllUsers.Except(onLineUsers)取两个集合的差时返回值是所有用户,包含了onLineUsers中的用户在内;
没怎么用过IList,请问这两个地方该如何使用?
...全文
425 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunday_L 2008-04-09
  • 打赏
  • 举报
回复
我也觉得是因为比较的引用对象,,而用ArrayList的Contains方法会出现混乱..

比较引用对象,,都是比较是否引用同一个地址,,如果new重新生成再赋值,,结果一样是错的..

所以LZ还是自己的集合类中重写Contains或者直接写更好..
michael1013 2008-04-09
  • 打赏
  • 举报
回复
这些方法都是引用比较,而并非像楼主所想的那样。

大胆揣测一下楼主是这么做的。

select * from .....

User u =new User()
u.Name = load.name;...


这种情况下,你的Contains等方法永远是false;和ArrayList<T>无关

所以不要用ArrayList的Contains方法等,自己去写。
ludingping 2008-04-09
  • 打赏
  • 举报
回复
ismezy2002说得对,你需要重写一些方法。不然,比较的时候是同一个对象也不会相等。
soaringbird 2008-04-07
  • 打赏
  • 举报
回复
用Linq吧
ismezy2002 2008-04-07
  • 打赏
  • 举报
回复
一般情况下Containe和IndexOf比较的是实例句柄,而不是实例的值。而你两次GetUser都是新实例,所以找不到。
重载vo对象的Equal试试。
真相重于对错 2008-04-07
  • 打赏
  • 举报
回复
IList.Containe
IList.IndexOf
....

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧