public class Lines
        {
            private int Id = 0;
            private bool IsTouching = false;
            private TouchPoint sPt = null;
            private TouchPoint ePt = null;
            public TouchPoint startPt
            {
                set { sPt = value; }
                get { return sPt; }
            }
            public TouchPoint endPt
            {
                set { ePt = value; }
                get { return ePt; }
            }
            public int touchId
            {
                set { Id = value; }
                get { return Id; }
            }
            public bool Touching
            {
                set { IsTouching = value; }
                get { return IsTouching; }
            }
        }List<Lines> TouchList = new List<Lines>();我是学vc的, 有些东西不大会, 请达人帮忙, 这个find在那么用?
我想将startPt作为key查找..
        private void Window_TouchDown(object sender, TouchEventArgs e)
        {
            ContentControl image = sender as ContentControl;
            if (image == null)
                return;            TouchPoint touchPt = e.TouchDevice.GetTouchPoint(image);
            if (TouchList.Find(touchPt) == -1)//编译错误
            {
                Lines myline = new Lines();
                myline.touchId = e.TouchDevice.Id;
                myline.startPt = touchPt;
                myline.Touching = true;
                TouchList.Add(myline);
            }
        }

解决方案 »

  1.   

    List<Lines>  TouchList.Find(Lines)  确定对象类型一样.
      

  2.   

    list.find 实际匹配的是对象的指针,即使对象内的值相同,但不是一个对象的情况下,也不能被找到。如果需要带key的list,请用Hashtable。
      

  3.   

    这边用contains
    if (!TouchList.Contains(touchPt))
    Find是的参数是个委托,例如
    TouchList.Find(t=>t.touchID==e.TouchDevice.ID)
    这样返回touchID和e.TouchDevice.ID相同的对象,如果没找到好像会抛异常,用FindOrDefault不会抛异常,没找到返回null
      

  4.   

    不好意思,说错了,contains不能用,如果不是一个对象的话不行,用find把要判断的条件都加进去
      

  5.   

    list.FindAll(delegate(string s){return s.Contains(Str);});
    list.FindAll(s => s.Contains(Str));
    FindIndex方法,然后判断返回的索引是否为非负
      

  6.   

    to
    zgke, kolosi
    我知道类型不对,我的目的是想查找这个类型下的startPt成员,然后返回下标. 另我用的是2010,找不到
    Hashtable这个东东..to
    leon0905
    find的参数是一个判断条件? 这个判断条件要怎么写??to
    wuyq11
    按大大的判断条件我改了下,但是编译不过..
    郁闷啊
    TouchList.FindAll(delegate(Lines findline){return findline.startPt;});
      

  7.   

    我这样改了下, 现在没有环境测试, 请帮我看看findindex是否使用正确. 谢谢了
            List<Lines> TouchList = new List<Lines>();        bool findTouchPt(Lines list)
            {
                return list.startPt.Equals(startPt);
            }        private void Window_TouchMove(object sender, TouchEventArgs e)
            {
                int nIndex = TouchList.FindIndex(new Predicate<Lines>(findTouchPt));
                if (nIndex != -1)
                {
                    if (TouchList[nIndex].Touching)
                    {
                        ContentControl image = sender as ContentControl;
                        if (image == null)
                            return;                    TouchPoint curPt = e.TouchDevice.GetTouchPoint(image);                    TouchDrawLine(TouchList[nIndex].startPt, curPt);
                        TouchList[nIndex].startPt = curPt;
                    }
                }      
            }
      

  8.   


            public class Lines
            {
                public int Id { get; set; }
                public bool IsTouching { get; set; }
                public TouchPoint sPt { get; set; }
                public TouchPoint ePt { get; set; }
            }        List<Lines> TouchList = new List<Lines>();        private void Window_TouchDown(object sender, TouchEventArgs e)
            {
                ContentControl image = sender as ContentControl;
                if (image == null)
                    return;            TouchPoint touchPt = e.TouchDevice.GetTouchPoint(image);            Lines lines = TouchList.Find(l => l != null && l.TouchPoint==touchPt);//不知道TouchPoint是不是值类型
                if (lines == null)
                {
                    Lines myline = new Lines();
                    myline.touchId = e.TouchDevice.Id;
                    myline.startPt = touchPt;
                    myline.Touching = true;
                    TouchList.Add(myline);
                }
            }