c# - c#省略嵌套类型参数
问题描述
我想创建一个具有将数据作为输入并提供数据作为输出的函数的操作类:
public abstract class Data { }
public abstract class Operation {
public abstract Data Run (Data input);
}
我想要不同数据输出而不是数据输入的灵活性:
public abstract class Data { }
public abstract class Operation<T1, T2>
where T1: Data
where T2: Data
{
public abstract T2 Run (T1 input);
}
最后,我想强制所有数据实现某种类型的列表:
public abstract class Data<T> : List<T> { }
public abstract class Operation<T1, T2>
where T1: Data // Error
where T2: Data // Error
{
public abstract T2 Run (T1 input);
}
然后我得到错误:“使用通用类型'数据'需要 1 个类型参数”。
如果不在 where 子句中明确设置数据类型,我应该如何解决此错误?
理想情况下希望以下代码工作:
public class Operation <????> { ???? }
public class Data<T> : List<T> {}
public class Foo {}
public class FooData : Data<Foo> {}
public class Bar {}
public class BarData : Data<Bar> {}
public class FBOperation : Operation<FooData, BarData> {
public override BarData Run (FooData input) {
return ...;
}
}
我应该如何实现 Operation 类?
解决方案
你可以这样做:
public class Foo { }
public class Bar { }
public interface IData { }
public interface IData<T> : IData
{
List<T> List{ get; set; }
}
public class Foos : IData<Foo>
{
public List<Foo> List{ get; set; }
}
public class Bars : IData<Bar>
{
public List<Bar> List{ get; set; }
}
public abstract class Operation<TD1, TD2>
where TD1 : IData
where TD2 : IData
{
public abstract TD2 Run(TD1 input);
}
public class FbOperation : Operation<Foos, Bars>
{
public override Bars Run(Foos input)
{
// TODO
return new Bars();
}
}
推荐阅读
- angular - Angular 如何修改 DOM?
- amazon-elasticache - 购买 AWS 预留弹性缓存节点抛出 ReservedCacheNodesOfferingNotFound 错误
- delphi - Delphi:如何直接读取windows dns缓存?
- python - Python 中的开尔文函数 KelvinBer[n,z]
- r - 使用 geom_sf() 时如何保持多个地块之间的比例一致?
- android - 如何在不打开应用程序的情况下运行警报
- javascript - 带输入的 onChange 不起作用
- html - Bootstrap 创建一个大按钮
- c++ - 为什么用“&1”检查负数
- xslt - xslt 中的规范化空间