實際上構造函數不需要字符串,你絕對可以肯定使用null。這是Exception類的reflectored部分:「類型的異常‘System.Exception的’被拋出」
internal string _message;
public Exception(string message)
{
this.Init();
this._message = message;
}
private void Init()
{
this._message = null;
this._stackTrace = null;
this._dynamicMethods = null;
this.HResult = -2146233088;
this._xcode = -532462766;
this._xptrs = IntPtr.Zero;
this._watsonBuckets = null;
this._ipForWatsonBuckets = UIntPtr.Zero;
this._safeSerializationManager = new SafeSerializationManager();
}
public virtual string Message
{
[SecuritySafeCritical]
get
{
if (this._message != null)
{
return this._message;
}
if (this._className == null)
{
this._className = this.GetClassName();
}
return Environment.GetRuntimeResourceString("Exception_WasThrown", new object[] { this._className });
}
}
所以,如果你使用null作爲構造消息,本地化的字符串像將被用作消息。這意味着 - 仍然有你的異常,而不是另一個,但它的屬性消息返回另一個(計算)的值,而不是構造函數的空值。
我認爲它是由設計(也許是在另一個地方使用)定義的Exception.Message應該始終不爲空。因此,如果我們想讓開發人員使用Exception類的默認構造函數(例如,用於反射或稍後允許填充屬性),但我們也希望Message始終不爲空 - 我們應該使用某些東西來包裝Message。我認爲,消息使用的可能位置之一是在發生異常之後顯示的默認對話框。這種方式可以使用只是消息屬性,而不是檢查 - 是消息屬性等於空等
檢查出「異常」與.NET反射器或Telerik JustDecompile ctor) – kol 2011-12-15 15:34:28