C# 有没有办法向泛型实例提供构造函数参数?
我不能用C做这个: Getting error“在创建类型参数“TException”的实例时无法提供参数。只想与社区一起检查是否有任何方法可以执行类似操作?最简单(也是最好的)方法是自己调用C# 有没有办法向泛型实例提供构造函数参数?,c#,.net,exception,casting,C#,.net,Exception,Casting,我不能用C做这个: Getting error“在创建类型参数“TException”的实例时无法提供参数。只想与社区一起检查是否有任何方法可以执行类似操作?最简单(也是最好的)方法是自己调用Activator.CreateInstance。这是C#编译器实际执行的操作,因为new()约束只确保指定的类型具有无参数构造函数;调用new TException()实际上使用Activator.CreateInstance来实例化类型 类似这样的方法会奏效: throw (Exception)Acti
Activator.CreateInstance
。这是C#编译器实际执行的操作,因为new()
约束只确保指定的类型具有无参数构造函数;调用new TException()
实际上使用Activator.CreateInstance
来实例化类型
类似这样的方法会奏效:
throw (Exception)Activator.CreateInstance(typeof(TException), exception);
我发现实现这一点的最简单方法是,除了泛型参数之外,让所讨论的类型采用工厂lambda。此工厂lambda负责为某些参数创建泛型参数的实例。例如
void TheMethod<TException>(Func<Exception,TException> factory) {
...
catch (Exception ex) {
var wrapped = factory(ex);
...
}
}
void方法(函数工厂){
...
捕获(例外情况除外){
var=工厂(出厂价);
...
}
}
我最近还写了一篇关于这个问题的博客文章,讨论了解决这个问题的各种方法
void TheMethod<TException>(Func<Exception,TException> factory) {
...
catch (Exception ex) {
var wrapped = factory(ex);
...
}
}