using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace collectiong_test
{
    class music
    {
      private ArrayList mylist = new ArrayList();
      private readonly string author;
      private ArrayList works = new ArrayList();      public music(string author)
      {
          mylist.Add(author);
          this.author = author;
      }      public ArrayList Works
      {
          get
          {
              return works;
          }
          set
          {
              works.Add(value);
          }
      }      public void method()
      {
          Console.Write(author+": ");
          foreach (string work in works)
          {
              Console.Write(work+",");
          }
      }      public ArrayList this[string index]
      {
          get
          {
              foreach (music my_m in mylist)
              {
                  if (my_m.author == index)
                  {
                      return my_m.works;
                  }
              }
              return null;
          }
          set
          {
              foreach (music my_m in mylist)
              {
                  if (my_m.author == index)
                  {
                      my_m.works.Add(value);
                  }
              }
          }
      }
    }
    class program
    {
        static void Main(string[] args)
        {
            music mymusic = new music("jay");
            mymusic.Works.Add("works1");
            mymusic.Works.Add("works2");
            mymusic.Works.Add("works3");
            mymusic["jay"] = "works4";//使用索引器添加
            // works4 这里报错 错误无法将类型“string”隐式转换“System.Collections.ArrayList”
            mymusic.method();
            Console.ReadKey();
        }
    }
}代码如上  想通过索引器来添加  总是写不对  求前辈帮忙!!

解决方案 »

  1.   

    public ArrayList this[string index]类型是ArrayList ,那么
    my_m.works.Add(value);
    中的value也是ArrayList 类型才行
      

  2.   

    mymusic["jay"] = "works4";//使用索引器添加
                // works4 这里报错 错误无法将类型“string”隐式转换“System.Collections.ArrayList”public ArrayList this[string index]这不是很明显的错误吗索引器接收的类型是ArrayList  你给了一个string ("works4") 
    所以提示错误 无法将类型“string”隐式转换“System.Collections.ArrayList”
      

  3.   

    是啊 错误我是知道的  我就是想知道 怎么改才能根据author 添加 works  
      

  4.   

    string strItem = "works4";
    ArrayList arr= new ArrayList();
    arr.Add(strItem);
     mymusic["jay"] = arr;
     public ArrayList this[string index]
          {
              get
              {
                  foreach (music my_m in mylist)
                  {
                      if (my_m.author == index)
                      {
                          return my_m.works;
                      }
                  }
                  return null;
              }
              set
              {
                  foreach (music my_m in mylist)
                  {
                      if (my_m.author == index)
                      {
                          //my_m.works.Add(value);           
                           my_m.works.AddRange(value); 
                       }
                  }
              }
          }
      

  5.   

    你的代码类型及其混乱,还是好好理一下把你main函数给works和mylist添加的都是字符串,而索引器中却是  music 类型foreach (music my_m in mylist)