类参数的泛型继承约束失败


public class Test<T>
{
private T something;
public Test<NewT> Cast<NewT>() where T : NewT
{
return new Test<NewT>() { something = this.something };
}
}

VS错误:"Test.Cast(("未定义类型参数"T">

为什么会发生这种情况?

这是因为您只能约束方法中定义的类型参数。T没有在方法中定义,而是在类中定义,所以不能这样约束它。

但是,您可以将Cast作为一种扩展方法:

// in some static class
public static Test<NewT> Cast<T, NewT>(this Test<T> test) where T : NewT {
return new Test<NewT>() { something = test.something }; 
}

这意味着something必须公开,这有时是不可取的。你也可以这样做:

public class Test<T>
{
public T Something { get; private set; }
public Test(T something) {
Something = something;
}
}
// in some static class
public static Test<NewT> Cast<T, NewT>(this Test<T> test) where T : NewT
{
return new Test<NewT>(test.Something);
}

最新更新