下面的代码无法编译,因为'无法将表达式类型'Response'转换为返回类型'T'
private T Test<T>() where T : SomeClass
{
return new SomeClass();
}
当您尝试返回constaraint中指定的类的子类时,错误接缝是合理的,但这里的类型完全相同。这种行为的原因是什么?
答案 0 :(得分:3)
你不能按照你描述的方式去做,因为如果你有派生类,例如
public class SomeDerivedClass : SomeClass
{
}
您的代码有效地尝试执行以下操作,这显然是不正确的:
private SomeDerivedClass Test2()
{
return new SomeClass();
}
可以在方法返回语句中返回类型T
,只需要在where子句中添加new()
约束
private T Test<T>() where T : SomeClass, new()
{
return new T();
}
答案 1 :(得分:0)
您可以通过添加new()
约束然后创建T
private T Test<T>() where T : SomeClass, new()
{
return new T();
}