我想实现一个通用方法来从数据库中检索标头/详细信息数据:
public static T RetrieveHeaderDetail<T> where T : Header<???>,new() // Where ??? means "what can I do here?" { // ... }
以下是表示文档标题的泛型的定义:
public class Header<TDetail> where TDetail : class,new() { public List<TDetail> Details; }
以下是一些实例:
public class RequestForQuotation : Header<RequestForQuotationDetail> { ... } public class Order : Header<OrderDetail> { ... } public class Invoice : Header<InvoiceDetail> { ... } // ..
不难证明,因为.NET不允许多重继承或“通用专门化”(这将允许Header< U>来自某些其他Header< V>),对于任何特定的T,存在于大多数U使得T从Header< U>继承(直接或间接).此外,找到类型U是很简单的:迭代T的基类型,直到找到Header< U>的实例,然后才拿出泛型的参数!不过,C#希望我指定将方法的定义更改为以下内容:
public static T RetrieveHeaderDetail<T,U> where T : Header<U>,new() where U : class,new() { // ... }
有没有办法解决这个问题?我知道使用Reflection是可能的,但我认为在运行时永远不能在编译时做什么是一个好习惯.
当我遇到这样的问题时,我真的非常想念C.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。