为什么我不能返回通用约束中指定的新类实例

时间:2015-02-18 05:28:49

标签: c# generics

下面的代码无法编译,因为'无法将表达式类型'Response'转换为返回类型'T'

    private T Test<T>() where T : SomeClass
    {
        return new SomeClass();
    }

当您尝试返回constaraint中指定的类的子类时,错误接缝是合理的,但这里的类型完全相同。这种行为的原因是什么?

2 个答案:

答案 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();
}