2010-12-17 77 views
1

我有一個具有ToString()的WeekdayException類。 我想用ToString()返回在Constructor中設置的字符串(「Illegal weekday:」+ wday)。如何訪問字符串?C#異常處理(給一個構造函數的字符串)

using System; 

class WeekdayException : ApplicationException { 
    public WeekdayException(String wday) : base("Illegal weekday: " + wday) {} 

    public override string ToString() 
    { 
     return "HELLO" + ???; 
    } 
} 

class TryCatchFinally 
{ 
    public static void Main(String[] args) 
    { 
     try 
     { 
      throw new WeekdayException("thrown by try"); 
     } 
     catch (ApplicationException ex) 
     { 
      Console.WriteLine("Catch ..." + ex.ToString()); 
     } 
    } 
} 

這是(製作和使用ToString())的方法,C#程序員使用?如果不是,那麼去哪裏?

+0

爲什麼重寫的ToString?是不是父母的版本去做你想要的?否則,請調用一些自己的(繼承)方法來獲取數據,或使用實例變量 – Robert 2010-12-17 19:55:40

+0

從ApplicationException繼承已經有一段時間不推薦。直接從'Exception'繼承。 – 2010-12-17 20:05:44

回答

3

這是如何您可以通過添加一個private成員變量訪問wday明確(見下文):

class WeekdayException : ApplicationException { 
    private readonly string weekday; 
    public WeekdayException(String wday) : base("Illegal weekday: " + wday) { 
     this.weekday = wday; 
    } 

    public override string ToString() 
    { 
     return "HELLO " + this.weekday; 
    } 
} 

,是這個(製作和使用ToString())是C#程序員使用的方法是什麼?如果不是,那麼去哪裏?

通常,對於例外情況,您設置並使用Message屬性,該屬性在調用基部ApplicationException的構造函數時設置。

class WeekdayException : ApplicationException { 
    public WeekdayException(string weekday) 
     : base("Illegal weekday: " + weekday) { } 
} 

然後:

try { 
    throw new WeekdayException("Tuesday"); 
} 
catch(WeekdayException weekdayException) { 
    Console.WriteLine(weekdayException.Message); 
} 

最後,不要像縮寫名稱weekday縮短變種像wday。只需使用全名。

1

我建議你overrideMessage屬性:

class WeekdayException : ApplicationException 
{ 
    private readonly string _message; 

    public override string Message 
    { 
     get { return _message; } 
    } 

    public WeekdayException(String wday) 
    { 
     _message = "Illegal weekday: " + wday; 
    } 

    public override string ToString() 
    { 
     return Message; 
    } 
}