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);
}
}
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);
}
}
{
get
{
foreach (Photo p in photos)
{
if (p.Title == title)
return p;
}
Console.WriteLine("无此相册");
return new Photo("");
} }
if (p.Title == title)
return p;
这一块的问题
有5个Photo ,你只赋值了前2个,剩下3个是null的
所以到3执行到3的时候p是null,
if (p.Title == title) 就抛异常了
{
get
{
foreach (Photo p in photos)
{
if (p!=null && p.Title == title)
return p;
}
Console.WriteLine("无此相册");
return new Photo("");
} }