为什么我不能 return 在通用约束中指定 class 的新实例

Why can't I return new instance of class specified in generic constraint

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

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

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

你不能按照你描述的方式去做,因为如果你有一个派生的 class,例如

public class SomeDerivedClass : SomeClass 
{
}

您的代码实际上是在尝试执行以下操作,这显然是不正确的:

private SomeDerivedClass Test2()
{
    return new SomeClass();
}

在方法return语句中return一个类型T是可以的,只需要在where子句

中添加一个new()约束
private T Test<T>() where T : SomeClass, new()
{
    return new T();
}

您可以通过添加 new() 约束然后创建 T

的实例来创建实例
private T Test<T>() where T : SomeClass, new()
{
    return new T();
}