[英]C# Generics with 'Wildcards'
我正在寻找一种使通配符在.NET
泛型中工作的方法。
我的代码如下:
private class Rule<TSource, TSelected> where TSource : class where TSelected : class
{
// stuff in here
}
我希望能够创建规则列表<>
,其中TSource
将相同,但TSelected
可能不同。
您需要IRule<TSource, in TSelected>
创建一个IRule<TSource, in TSelected>
逆的通用接口 IRule<TSource, in TSelected>
并列出该列表,此外TSelected
将被限制在某个有意义的类中。 可以像现有代码中那样约束任何引用类型,但是您将无法对TSelected
进行任何有意义的处理。
目前,没有其他方法可以使用变体泛型(除非您当然使用List<dynamic>
或等效的方法进入反射模式),因此,如果此解决方案对您不起作用,则需要重新设计。
如果我没看错你的问题,我认为你必须这样做:
public interface ISelected
{
// ISelected interface
}
// A TSelected implementation
public class Implementation1: ISelected { }
// Another
public class Implementation2 : ISelected { }
// our Rule
private class Rule<TSource, TSelected> where TSource : class where TSelected ISelected
{
}
如果TSelected
类具有相同的超类,则只需列出Rule<TSource, TSelectedSuperClass>
。 我相信您可以在再次读取TSelected
对象之后使用typeof( http://msdn.microsoft.com/zh-cn/library/58918ffs ( TSelected
) .aspx )获取确切的子类。
或者,您可以使容器类既包含容器类,又存储确切类型。
接口可以代替超类来实现。 但是,如果使用Selected共享实现,则我更喜欢抽象类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.