List<Store> listStore = Session["store"] as List<Store>;//Store是个类
Store st = new Store(id, name, img);
//这里怎么判断listStore是否有st这个元素
如果没有就listStore.add(st)
MSDN里说listStore.Contains(st),但还是判断不出。
我用的是2.0。

解决方案 »

  1.   


    bool blnIsHave=false
    foreach(Store objItem in listStore)
    {
      if(objItem.id==st.id) //判断是否相同的条件  或者自己定义
      {
         blnIsHave=true;
         break;
      }
    }
    if(!blnIsHave)
    {
      listStore.Add(st);
    }
      

  2.   

    如果你新建了一个Store,listStore 中肯定是没有的。
    你是不是根据id还是什么的判断以免重复插入啊,你可以用Find方法,这方法参数是个委托,你可以自定义判断重复的条件。
      

  3.   

    因为Store是个类,所以你每次new获得的对象都是新的对象,即使两个对象的所有内部属性或变量都相同,也会判定为不相等,因为它是判断的内存地址指向是否相同。不过你可以使用3.0的扩展方法自定义一个使用IEqualityComparer接口的类来扩展Contains方法,那样Contains方法就会使用你设定的比较方法来判定是否相等了。
    public static bool Contains<TSource>(
    this IEnumerable<TSource> source,
    TSource value,
    IEqualityComparer<TSource> comparer
    )2.0下比较傻瓜的方法是循环List<Store>中每个元素,比较每个元素中的成员变量及属性是否相等。自己写一个方法包装下,看起来就简洁一些。
      

  4.   


    if(listStore.Contains(st))
    {
      //包含
    }
    else
    {
      //不包含
    }
      

  5.   

    不好意思我答错了,如qldsrx 所说,的确List.Contains是比较对象的Hash的所以即使属性一样,不是同一个对象也不会判断为相同.可以如coodd 所说用Find方法