是否有可能检查一个类型是否具有无参数构造函数,以便对其进行强制转换并调用需要具有: new()
约束的无参数构造函数的方法?
仅能够检查此处回答的公共无参数类型是不够的,因为它不允许调用目标方法。
目标是具有以下逻辑,其中IInteresting
对象不实现公共无参数构造函数,需要在调用之前进行转换Save1
:
public interface IInteresting { }
public void Save<T>(T o) {
var oc = o as (new()); /* Pseudo implementation */
if (oc != null) {
this.Save1(oc);
}
else {
var oi = o as IInteresting;
if (oi != null) {
this.Save2(oi);
}
}
}
private void Save1<T>(T o) where T : new() {
//Stuff
}
private void Save2<T>(IInteresting o) {
//Stuff to convert o to a DTO object with a public parameterless constructor, then call Save1(T o)
}
当然,如果我可以制作Save1
并Save2
共享可以解决问题的相同签名,但我找不到这样做的方法,因为以下内容将无法编译(在 中Routine
,Save
将调用第一个实现而不是第二个实现):
public void Routine<T>(T o) {
var oi = o as IInteresting;
if (oi != null) {
this.Save(oi);
}
}
private void Save<T>(T o) where T : new() {
//Stuff
}
private void Save<T>(IInteresting o) {
//Stuff to convert o to a DTO object with a public parameterless constructor, then call Save(T o)
}