using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication7
{
class Photo
{//Photo類
string _title;
public Photo(string title)
{//構造函數
this._title = title;
}
public string Title
{//訪問器
get
{
return _title;
}
}
public override string ToString()
{
try
{
return _title;
}
catch (NullReferenceException e)
{
throw new NullReferenceException("Not Found");
}
}
}
class Album
{
// 該數組用於存放照片
Photo[] photos;
public Album(int capacity)
{
photos = new Photo[capacity];
}
public Photo this[int index]
{//索引器
set {
if (index<0 || index>=photos.Length)
Console.WriteLine("Wrong Index");
else
photos[index] = value; }
get {
if (index < 0 || index >= photos.Length)
return null;
return photos[index]; }
}
public Photo this[string str]
{//索引器
get {
int i = 0;
while (i < photos.Length)
{
if (photos[i].ToString() == str)
return photos[i];
i++;
};
return null;
}
}
}
class Program
{
static void Main(string[] args)
{
// 創建一個容量為 3 的相冊
Album family = new Album(3);
// 創建 3 張照片
Photo first = new Photo("Jeny ");
Photo second = new Photo("Smith");
Photo third = new Photo("Lono");
// 向相冊加載照片
family[0] = first;
family[1] = second;
family[2] = third;
// 按索引檢索
Photo objPhoto1 = family[2];
Console.WriteLine(objPhoto1.Title);
// 按名稱檢索
Photo objPhoto2 = family["Jeny"];
Console.WriteLine(objPhoto2.Title);
Console.Read();
}
}
}
運行後報錯,原因在於Photo objPhoto2 = family["Jeny"]中"Jeny"與"Jeny "(Jeny後有空格)不相等,索引器返回值為null。此時objPhoto2為null,不能執行Console.WriteLine(objPhoto2.Title);
請問這個異常是誰呢麼類型的異常?我該如何使用異常處理,使其輸出“Not Found”?
如果不是在自己重寫的Tostring()函數中,那麼應當在那裡捕獲這個異常?
第一次提問,略惶恐,先謝謝前輩們
在toString中沒有必要使用try...catch
完全可以if判斷下objPhoto2是否null
我感覺try...catch沒有必要刻意去使用,簡單的用if就行,真的是有必要的時候用才是最合理的
真想用的話
try
{
Console.WriteLine(objPhoto2.Title);;
}
catch (NullReferenceException e)
{
throw new NullReferenceException("Not Found");
}