public partial class Form1 : Form
   {
        public Form1()
         {
            InitializeComponent();
            listBox1.DisplayMember = "UserID";  
            listBox1.ValueMember = "Name";   
         }
        private void button1_Click(object sender, EventArgs e)
         {
             List<Class1> list = new List<Class1>();
             list.Add(new Class1() { UserID = 1, Name = "A" });
             list.Add(new Class1() { UserID = 2, Name = "B" });
             list.Add(new Class1() { UserID = 3, Name = "C" });
             listBox1.DataSource = list;
         }
}
class Class1
{        
 public int UserID { get; set; }
 public string Name { get; set; } 
}
listBox1的项是Class1对象,如果要判断是否Contains,怎么判断?比如我要判断listBox1是否包含1那一项,难道是
if(listBox1.Items.Contains(1)),这样写正确吗?

解决方案 »

  1.   

    设置了 DataSource ,Items 里就是空的,不能通过 Items.Contains 了,
    如果要判断,可以这样
    if (((List<Class1>)listBox1.DataSource).Exists(v1 => v1.UserID == 1))
    {
        // ......
    }
      

  2.   

    可以这样写,不过没楼上简单
     private bool IsContains()
            {
                bool flag = false;
                foreach (var item in listBox1.Items)
                {
                    Class1 cl = item as Class1;
                    if (cl.UserID == 1 || cl.Name == "A") ;
                    return true;
                }
                return flag;
            }
      

  3.   

    if(listBox1.Items.Contains(new Class1() { UserID = 1, Name = "A" }))
      

  4.   

    我试过,Items不为空啊,
    另外,如果没有使用DataSource,而是在不定时的Items.Add,那又怎么把Items转换成List<Class1>呢?
      

  5.   


    listBox1.Items.Cast<Class1>().Any(o => o.UserID == 1)
      

  6.   


    强制类型转换  (class1)item或者item as class1
      

  7.   

    如果是 Items 添加的,就这样
    foreach (Class1 item in listBox1.Items)
    {
        if (item.UserID == 1)
        {
            // 找到了
        }
    }
      

  8.   

    如果你添加的引用类型,Contains 默认是比较引用的,就算你值一样,但是 new 出来的,引用不一样
      

  9.   

       List<Class1> list = new List<Class1>();//放在外面,,判断list是否包含就可以了private void button1_Click(object sender, EventArgs e)
      {
      list.Add(new Class1() { UserID = 1, Name = "A" });
      list.Add(new Class1() { UserID = 2, Name = "B" });
      list.Add(new Class1() { UserID = 3, Name = "C" });
      listBox1.DataSource = list;
      }if(list.Contains(new Class1() { UserID = 1, Name = "A" }))
    {}
      

  10.   

    这样要让 Class1 继承并适当实现 IEquatable<Class1> 接口才可能 Contains 成功