After Removing everything from the list it backs to 1?

Hey, so my problem is that after I remove everything from the list and it gets out of the loop it goes back 1.

What I think is there is a problem with using List.add with the raycast It could be not true I am just guessing Can someone tell me the reason please and how to fix it? Here is the code

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Check : MonoBehaviour {
	public GameObject[] gob;
	public GameObject gob1;
	public int checker;
	List<GameObject> Cards = new List<GameObject>();
	public static int chec = 0;
	RaycastHit hit;
	public FlipAD s;
	void Start () {
		Debug.Log ("START!");

	}
	
	// Update is called once per frame
	void Update () {
		if (Input.GetMouseButtonDown (0)) {

			if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit)) {
				Cards.Add(hit.collider.gameObject); //HERE IS WHERE I ADD TO THE LIST
				Debug.Log (hit.collider.tag);
			}
		}
		Debug.Log(Cards.Count);
		//Debug.Log (hit.collider.tag);
		Debug.Log (chec);
		if(Cards.Count == 2){
			Debug.Log("Yup Rotation starts here");
			float rot = 0f;
			while (rot < 180f){
				Cards[0].transform.Rotate(new Vector3(0,90,0) * Time.deltaTime); 
				Cards[1].transform.Rotate(new Vector3(0,90,0) * Time.deltaTime); 
				rot = rot + 90f * Time.deltaTime;
			}
			int i =0;
			while (Cards.Count !=0){ //HERE WHERE DO I REMOVE EVERYTHING FROM THE LIST
			Cards.RemoveAt(i);
				i++;
			} 

		} // AFTER LEAVING THE IF CONDITION THE LIST GOES BACK 1 WITHOUT CLICKING ON ANOTHER OBJECT
		if (Input.GetMouseButtonDown (0) && (chec) == 2 && hit.collider.tag == "AD") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("AD");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (Input.GetMouseButtonDown (0) && (chec) == 20 && hit.collider.tag == "D") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("D");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (Input.GetMouseButtonDown (0) && (chec) == 200 && hit.collider.tag == "S") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("S");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (Input.GetMouseButtonDown (0) && (chec) == 2000 && hit.collider.tag == "RAK") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("RAK");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (Input.GetMouseButtonDown (0) && (chec) == 20000 && hit.collider.tag == "FUJ") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("FUJ");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (Input.GetMouseButtonDown (0) && (chec) == 200000 && hit.collider.tag == "UQ") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("UQ");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (Input.GetMouseButtonDown (0) && (chec) == 2000000 && hit.collider.tag == "AJ") {
			Debug.Log ("first if");
			gob = GameObject.FindGameObjectsWithTag ("AJ");
			Invoke ("Destro", 4);
			chec = 0;
		} else if (chec!= 0 && chec != 1 && chec != 2 && chec != 10&& chec != 20&& chec != 100&& chec != 200&& chec != 1000&& chec != 2000&& chec != 10000&& chec != 20000&& chec != 100000&& chec != 200000&& chec != 1000000&& chec != 2000000){ 
			Debug.Log("First False");
			chec = 0;

				}
	}
	void Destro(){
		for (int i =0; i<2; i++) {
			
			Destroy (gob *);*
  •  }*
    
  • }*

}

[55887-list1.png|55887]*
*

int i =0;
while (Cards.Count !=0){ //HERE WHERE DO I REMOVE EVERYTHING FROM THE LIST
Cards.RemoveAt(i);
i++;
}

Think of what you are doing there, i is 0 then remove the first item, then i is 1 and you remove the second item (which was initially the third) . i keeps on increasing, while the list is reducing, I would actually expect a index out of bound exception.

All in all, you wan to empty the list:

list.Clear();

if you want to do it properly:

for(int i = list.Count - 1 ; i >= 0; i--)
{
     Item item = list*;*

list.RemoveAt(i);
Destroy(item); // If you need them off
}
list = null;
list = new List();