我正在将 ExceptionManager 包装在 Microsoft 的企业库的异常处理 block 中,并且我希望允许我的包装器的使用者指定包装器的实例化器允许重新抛出哪些异常类型。像这样:
public class MyExceptionManager<T> : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionManager where T: MyCustomException
{
...
public void LogWrapAndRethrow(Exception e, T t)
{
base.HandleException( e, "MyPolicyName", out t);
}
...
}
我希望用户能够:
var em = new MyExceptionManager<MyCustomExceptionClass>();
var x = new MyCustomExceptionClass();
em.LogWrapAndRethrow(new Exception(),x);
...并在编译时检查
这是基本方法的签名:
public bool HandleException(Exception exceptionToHandle, string policyName, out Exception exceptionToThrow);
这不是泛型类。
不幸的是,即使 T 被限制为从 Exception 继承的类型,我仍然不断收到“...的最佳重载匹配有一些无效参数”。如果我手动创建并分配一个 Exception 变量,它将用作输出参数。
我做错了什么?
最佳答案
用于out
参数的参数必须完全匹配声明的参数类型。由于 HandleException
有第三个参数 out Exception exceptionToThrow
,目前无法使用。
鉴于您不需要异常从您的方法中返回,将方法编写为最简单的方法:
public void LogWrapAndRethrow(Exception e, T t)
{
Exception tmp = t;
base.HandleException( e, "MyPolicyName", out tmp);
}
现在您正在使用 Exception
类型的参数调用该方法,所以没关系。
关于c# - 如何使用泛型在基类的方法中指定输出参数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391907/