System.Exception
類有4個構造函數:爲什麼在C#Exception類沒有帶有1個異常參數的構造函數?
public Exception();
public Exception(string message);
protected Exception(SerializationInfo info, StreamingContext context);
public Exception(string message, Exception innerException);
爲什麼它沒有這個構造?
public Exception(Exception innerException);
這是一個地方,這將是有幫助的。
我有一個靜態方法來得到一個開放的連接:
public static DbConnection GetOpenConnection(string dataProvider, string connectionString)
{
DbConnection dbConnection = GetDbProviderFactory(dataProvider).CreateConnection();
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
return dbConnection;
}
我想這個方法拋出一個自定義異常GetOpenConnectionException
如果有錯誤發生。
因此,我創建了自定義異常GetOpenConnectionException
:
public class GetOpenConnectionException : Exception
{
public GetOpenConnectionException(string message) : base(message)
{
}
public GetOpenConnectionException(string message, Exception innerException) : base(message, innerException)
{
}
}
由於Exception
沒有構造public Exception(Exception innerException)
,我不能有這樣的代碼在GetOpenConnectionException
:
public GetOpenConnectionException(Exception innerException) : base(innerException)
{
}
所以我不得不來編碼GetOpenConnection()
這種方法:
public static DbConnection GetOpenConnection(string dataProvider, string connectionString)
{
try
{
DbConnection dbConnection = GetDbProviderFactory(dataProvider).CreateConnection();
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
return dbConnection;
}
catch (Exception e)
{
throw new GetOpenConnectionException("", e);
}
}
我想要的東西是這樣的編碼方法GetOpenConnection()
:
public static DbConnection GetOpenConnection(string dataProvider, string connectionString)
{
try
{
DbConnection dbConnection = GetDbProviderFactory(dataProvider).CreateConnection();
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
return dbConnection;
}
catch (Exception e)
{
throw new GetOpenConnectionException(e);
}
}
這是否有道理?
任何原因,你不能只是做'public GetOpenConnectionException(Exception innerException):base(「」,innerException)'' –
基本上你只是在另一個異常中包裝一個異常,添加一條消息有助於說明爲什麼要包裝它,否則只是重新拋出內部異常。如果您沒有爲異常增加價值,請不要包裝它。 –
通過在此處重新拋出異常,您獲得了什麼? –