関数array_typeのコメント部に書いてあるようにidx[0]と書いて画面に表示したり
== や> < などを使って比較したりしたいのですがどうすればいいのでしょうか?

質問ですが参照と値型ではジェネリックでも書き分けるしかないのでしょうか?

                static void array_type<type>(type idx,type id)
                    where type : class,ICollection
                {

                    Console.WriteLine(idx[0]);//idx[0];と書きたい。


                    //foreach(var x in idx)
                    //{
                    //    Console.WriteLine(x);
                    //}

                    //for(int i=0; i< idx.Count; i++)
                    //{

                    //}

                }
                static void Main(string[] args)
                {

                    //dtest a = () => { Console.WriteLine("delegate"); };

                    //int[] str = new int[] {1,2,3,4,5,6,7,8,9,10};
                    string[] str = new string[3] { "aaa", "bb", "ccc" };
                    string[] str2 = new string[3] { "aaavvvvvvvvvvv", "bb", "ccc" };


                    array_type<string[]>(str,str2);