繁体   English   中英

如何将一种异常作为参数传递?

[英]How to pass a type of exception as a parameter?

我想有一个接收一种异常的方法(即传递的参数必须是一个实现System.Exception的类)。

这样做的正确方法是什么?

以下不是我想要的:

public void SetException(Exception e)

......需要一个例外实例。 我想传递一种类型的异常,如InvalidProgramException


编辑:为了进一步解释我想要做什么,我希望能够跟踪我之前看过每种类型的异常的次数。 所以我希望能够做到这样的事情:

Dictionary<ExceptionTypeThing, int> ExceptionCounts;

public void ExceptionSeen(ExceptionTypeThing e)
{
    // Assume initialization
    ExceptionCounts[e]++;
}

ExceptionSeen(InvalidProgramException);

我不想传递异常的实例,而是按异常类型跟踪它。

听起来你需要一个通用的方法

public void SetException<TException>() where TException : Exception
{
    ExceptionCounts[typeof(TException)]++;
}

你可以称之为

SetException<InvalidProgramException>();

编辑:

Dictionary<Type, int> ExceptionCounts;
public void ExceptionSeen(Type type)
{
    ExceptionCounts[type]++;
}

称之为

ExceptionSeen(typeof(MyException));

或者如果您已经拥有异常实例

ExceptionSeen(ex.GetType());

定义接受实例的泛型方法,然后使用泛型类型约束强制它从Exception继承:

public void SetException<T>() where T : Exception
{
}

如果您只想传递一个类型,请指定'Type'作为参数类型,然后如果您想确保它是异常类型,您需要在运行时检查类型:

public void SetException(Type t) {
    if (!typeof(Exception).IsAssignableFrom(t)) {
       throw new ArgumentException("t");
    }
}

像这样:

public void SetException(Type type)

SetException(typeof(InvalidProgramException))
// or
SetException(e.GetType)

另一种选择是使用泛型来帮助

public void SetException<T>()    
SetException<InvalidProgramException>()

要么

public void SetException<T>(T exception)    
SetException(e);

您可以创建继承基本异常(即异常类)的自定义类,然后您可以通过已创建的自定义类的参数类型在方法中传递任何类型的异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM