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”
为什么会这样?
答案 0 :(得分:0)
这是因为您只能约束方法中定义的类型参数。 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);
}