using System;
class Photo
{
    private string Pititle;
    public Photo()
    {
        Pititle = "king";
    }
    public Photo(string title)
    {
        Pititle = title;
    }
    public string Title
    {
        get
        {
            return Pititle;
        }
        set
        {
            Pititle = value;
        }
    }
}
class Mypicture
{
    Photo[] photos;
    public Mypicture()
    {
        photos = new Photo[2];
    }
    public Mypicture(int phlen)
    {
        photos = new Photo[phlen];
    }
    public Photo this[int index]
    {
        get
        {
            if (index < 0 || index > photos.Length)
            {
                Console.WriteLine("索引器无效");
                return null;
            }
            return photos[index];
        }
        set
        {
            if (index < 0 || index > photos.Length)
            {
                Console.WriteLine("索引器无效");
            }
            photos[index] = value;
        }
    }
    public Photo this[string title]
    {
        get
        {
            foreach (Photo p in photos)
            {
                if (p.Title == title)
                    return p;
            }   
            Console.WriteLine("无此相册");
            return null;
        }    }
}
class Test
{
    static void Main()
    {
        Mypicture myphoto = new Mypicture(5);
        Photo first = new Photo();
        Photo second = new Photo("小李");
        myphoto[0] = first;
        myphoto[1] = second;
        Photo test = myphoto[0];
        Photo Test = myphoto["小王"];//在执行至此时会抛出异常,未将对象引用设置到实例对象.如果换成已存在的title,如"小李"则正确.请各位高手前辈指教原因.本人初学
        Console.WriteLine(test.Title);
        Console.WriteLine(Test.Title);
    }
}

解决方案 »

  1.   

    public Photo this[string title]
        {
            get
            {
                foreach (Photo p in photos)
                {
                    if (p.Title == title)
                        return p;
                } 
                Console.WriteLine("无此相册");
                return new Photo("");
            }    } 
      

  2.   

    还是有异常.一样的异常..未将对象引用设置到实例对象应该是
    if (p.Title == title) 
              return p; 
    这一块的问题
      

  3.   

    Mypicture myphoto = new Mypicture(5); 
    有5个Photo ,你只赋值了前2个,剩下3个是null的
    所以到3执行到3的时候p是null,
    if (p.Title == title) 就抛异常了
      

  4.   

    public Photo this[string title]
        {
            get
            {
                foreach (Photo p in photos)
                {
                    if (p!=null && p.Title == title)
                        return p;
                }
                Console.WriteLine("无此相册");
                return new Photo("");
            }    }