c# - 类参数的通用继承约束失败
问题描述
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);
}
推荐阅读
- python - 如何检查一个人是否包含在模型中以制作工作/帖子
- angular - Angular 8 - 从两个不同的组件订阅一项服务
- xml - 将 XML 转换为 XPath 格式
- c# - 复选框不会取消选中
- r - 将 char 转换为 mutate 中的数字数据分配给数据框变量
- excel - 从 Excel 文件中获取下拉列表的值
- javascript - 反应原生:有办法做一个手风琴表吗?
- google-bigquery - 使用 BigQuery Geo Viz 可视化多边形及其质心
- flutter - Dart Experts - 按不同值对列表进行分组,并计算总和
- c - OpenSSL:如何从 RSA 结构中导出 RSA 密钥?