public static void OnlyOneSelectAndCray(CheckBox p1, CheckBox p2, CheckBox p3, CheckBox p4)
       {
           OnlyOneSelectAndCray(p1, p2);
           OnlyOneSelectAndCray(p3, p2);
           OnlyOneSelectAndCray(p3, p1);
           OnlyOneSelectAndCray(p4, p1);
           OnlyOneSelectAndCray(p4, p2);
           OnlyOneSelectAndCray(p4, p3);
       }
       public static void OnlyOneSelectAndCray(CheckBox p1, CheckBox p2, CheckBox p3, CheckBox p4, CheckBox p5)
       {
           OnlyOneSelectAndCray(p1, p2);
           OnlyOneSelectAndCray(p3, p2);
           OnlyOneSelectAndCray(p3, p1);
           OnlyOneSelectAndCray(p4, p1);
           OnlyOneSelectAndCray(p4, p2);
           OnlyOneSelectAndCray(p4, p3);
           OnlyOneSelectAndCray(p5, p1);
           OnlyOneSelectAndCray(p5, p2);
           OnlyOneSelectAndCray(p5, p3);
           OnlyOneSelectAndCray(p5, p4);
       }
每两个参数之间都执行方法OnlyOneSelectAndCray.
能写一个不限参数个数的方法吗? params CheckBox[] p1
求大神指教.

解决方案 »

  1.   

       public static void OnlyOneSelectAndCray(params  CheckBox[] p1)
            {
                for (int i = 0; i < p1.Length; i++)
                {
                    for (int j = i + 1; j < p1.Length; j++)
                    {
                        OnlyOneSelectAndCray(p1[i], p1[j]);
                    }
                }
            }
         
      

  2.   

    public static void OnlyOneSelectAndCray(param CheckBox[] checkboxs)
    {
        var list = checkboxs.SelectManay(x => checkboxs.Select(y => new { x, y })).Where(x => x.x.GetHashCode() > x.y.GetHashCode()).ToList();
        foreach (var item in list) OnlyOneSelectAndCray(item.x, item.y);
    }
      

  3.   

    改一下吧
      public static void OnlyOneSelectAndCray(CheckBox p1,CheckBox p2)
            {
            }        public static void OnlyOneSelectAndCray(params  CheckBox[] p1)
            {
                if (p1 == null || p1.Length < 2)
                    return;            if (p1.Length == 2)
                {
                    OnlyOneSelectAndCray(p1[0], p1[1]);
                    return;
                }            for (int i = 0; i < p1.Length; i++)
                {
                    for (int j = i + 1; j < p1.Length; j++)
                    {
                        OnlyOneSelectAndCray(p1[i], p1[j]);
                    }
                }
            }
      

  4.   

    提供一个思路        private void ListCmbDo(List<CheckBox> lists)
            {
                 //处理CheckBox两两匹对情况
            }