基于类型参数实例化新对象
本文关键字:对象 新对象 类型参数 实例化 | 更新日期: 2023-09-27 18:14:50
我试图根据传递给方法的异常类型参数抛出异常。
这是目前为止我所拥有的,但我不想指定每种异常:
public void ThrowException<T>(string message = "") where T : SystemException, new()
{
if (ConditionMet)
{
if(typeof(T) is NullReferenceException)
throw new NullReferenceException(message);
if (typeof(T) is FileNotFoundException)
throw new FileNotFoundException(message);
throw new SystemException(message);
}
}
理想情况下,我想做一些类似new T(message)
的事情,因为我有一个基本类型SystemException
,我认为这是可能的。
我不认为您可以单独使用gerics做到这一点。您需要使用反射。比如:
throw (T)Activator.CreateInstance(typeof(T),message);
正如其他人所说,这只能通过反射来完成。但是您可以去掉类型参数,并将实例化的异常传递给函数:
public void ThrowException(Exception e)
{
if (ConditionMet)
{
if(e is NullReferenceException || e is FileNotFoundException)
{
throw e;
}
throw new SystemException(e.Message);
}
}
用法:
// throws a NullReferenceException
ThrowException(new NullReferenceException("message"));
// throws a SystemException
ThrowException(new NotSupportedException("message"));
可以使用
Activator.CreateInstance(typeof(T),message);
更多信息请访问http://msdn.microsoft.com/en-us/library/wcxyzt4d.aspx