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)'' –
基本上你只是在另一个异常中包装一个异常,添加一条消息有助于说明为什么要包装它,否则只是重新抛出内部异常。如果您没有为异常增加价值,请不要包装它。 –
通过在此处重新抛出异常,您获得了什么? –