12 在Foreach循环中怎么获得当前迭代的索引

12 在Foreach循环中如何获得当前迭代的索引
        static void ForEachIndex()
        {
            int curIndex = 0;

            Dictionary<string, string> diction = new Dictionary<string,string>();
            int counter = 0;

            diction.Add("One", "One");
            diction.Add("Two", "Two");
            diction.Add("Three", "Three");
            diction.Add("Four", "Four");
            diction.Add("Five", "Five");
            diction.Add("Six", "Six");
            diction.Add("Seven", "Seven");

            foreach (Object obj in diction)
            {
                Console.WriteLine(counter);
                counter++;
            }


            List<String> stringList = new List<string>();
            stringList.Add("One");
            stringList.Add("Two");
            stringList.Add("Three");
            stringList.Add("Four");
            stringList.Add("Five");
            stringList.Add("Six");
            stringList.Add("Seven");

            
            foreach(String str in stringList)
            {
                curIndex = stringList.IndexOf(str);
                Console.WriteLine(curIndex.ToString());
            }

            System.Collections.ArrayList arList = new ArrayList();

            arList.Add("One");
            arList.Add("Two");
            arList.Add("Three");
            arList.Add("Four");
            arList.Add("Five");
            arList.Add("Six");
            arList.Add("Seven");

            foreach (String str in arList)
            {
                curIndex = arList.IndexOf(str);
                Console.WriteLine(curIndex.ToString());
            }
        }