考虑以下接口:
尝试使用以下方法实现:
这仍然无法解决问题,因为
编译器错误CS0425的文档中提到:
考虑以下接口:
public interface IFoo
{
M Bar<M>();
}
尝试使用以下方法实现:
class Foo : IFoo
{
public M Bar<M>()
{
return new M();
}
}
如果不工作,则编译器会抱怨 M
缺少 new()
约束。
当我添加约束时,如下所示:
class Foo : IFoo
{
public M Bar<M>() where M : new()
{
return new M();
}
}
这仍然无法解决问题,因为
Foo.Bar
的限制与接口方法的限制不匹配(而我无法更改它们)。编译器错误CS0425的文档中提到:
如果“显式实现接口”是解决方案:我该如何做?要避免此错误,请确保两个声明中的where子句相同,或显式实现接口。
default(M)
是否足够好?它返回给定泛型类型的默认值,对于引用类型来说,这是null
。否则,您将需要使用表达式树或反射来创建实例。 - Adam Houldsworth